欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Maven打包所有依赖到一个可执行jar中

程序员文章站 2022-04-28 22:57:44
...

首先说一下比较常用的两种打包方式:

前提:maven构建可执行jar包时,如果项目依赖了pom中定义的dependency之外的外部jar包,maven-jar-plugin默认是不会把这

些额外jar包的依赖信息放在jar文件的MANIFEST.MF文件中的,这会导致jar包运行时出现找不到指定类的错误

方式一:

打包成可执行jar文件,但是将所有依赖(包括外部依赖)单独打包到另外一个指定文件夹下,通过指定Class-Path的方式关联

依赖。

1.1 打包依赖到指定文件夹

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>                                                
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

1.2 指定启动入口,并关联依赖

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <!-- 是否绑定依赖,将外部jar包依赖加入到classPath中 -->
                <addClasspath>true</addClasspath>
                <!-- 依赖前缀,与之前设置的文件夹路径要匹配 -->
                <classpathPrefix>lib/</classpathPrefix>
                <!-- 主函数的入口 -->
                <mainClass>com.beiyou.H5_ZJH</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

方式二:将整个工程打成一个可执行jar包,包含所有的依赖。

在有外部依赖的情况下,第一步依然是打包外部依赖。这里就不再赘述。同时,需要在mainfest节点下进行绑定(下面是未绑定

的例子)

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>cn.outofmemory.MainClass</mainClass>
      </manifest>
    </archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id> <!-- 此处指定继承合并 -->
      <phase>package</phase> <!-- 绑定到打包阶段 -->
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>