使用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>

posted @ 2020-12-15 22:48  Blithe-Chiang  阅读(4161)  评论(0编辑  收藏  举报