使用maven打包普通的java項目


使用maven打包普通的java項目

這篇文章如何將一個maven項目打包成可執行的jar包,方便再其他機器上面運行。不會出現找不到主類的情況。

TL;DR

直接點擊下面這個目錄的附加選項。

使用quickstart模板創建maven項目(如果有的話,可以跳過)

創建的過程

第一步新建一個Module1608042420392
第二步 然后按照下圖所示點擊(如果你從來沒有接觸過maven的話)1608042307874
第三步 填寫maven項目的信息1608042519562
通過quickstart模板創建完成后的項目的結構

1608042622100

小修改: 將jdk的版本改成1.8

由於我主要使用的是java1.8 而quickstart這個模板用的是java 1.7 ,所以我們要修改pom.xml文件。下圖是修改方法1608042802549

修改后的樣子1608042845848

這個是App文件的內容,我們可以看到,僅僅是輸出hello world而已

package com.example;

/**
 * Hello world!
 */
public class App {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

正式的步驟

具體步驟

修改pom.xml的build標簽:添加assembly依賴並且指定jar包的主類

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
           <!-- 這個mainClass 用來指定 jar的主類,使用的是全限定名稱 -->   
           <!-- <mainClass>fully.qualified.MainClass</mainClass> -->
           <mainClass>com.example.App</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
    </plugin>
  </plugins>
</build>

修改后的完整的pom文件應該是這個樣子的

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>demo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>demo</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>


  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <!-- 這個mainClass 用來指定 jar的主類,使用的是全限定名稱 -->  
              <!--<mainClass>fully.qualified.MainClass</mainClass>-->
              <mainClass>com.example.App</mainClass>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

打包項目

做到這一步,我們已經完成了所有的前置工作了。

我們可以隨時用這條命令mvn clean compile assembly:single打包這個項目。

執行這條命令的結果如圖1608043225324

運行起來試試,看來我們成功了。1608043248670

附加選項

如果在pom.xml<build>標簽里面添加一些下面這樣的配置的話,

那么可以直接使用在pom.xml同級目錄下使用一行指令mvn package打包

<build>
  <plugins>
    <!-- 其他的一些plugin... -->
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <!--這里改成你主類的全限定名稱-->
            <mainClass>com.example.App</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
      <!--在執行package動作的時候,自動打包-->
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <!-- 其他的一些plugin... -->
  </plugins>
</build>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM