使用 Maven 在 jar 中包含依赖项

2022-08-31 04:35:03

有没有办法强制maven(2.0.9)将所有依赖项包含在单个jar文件中?

我有一个项目,构建成一个jar文件。我希望将依赖项中的类也复制到jar中。

更新:我知道我不能只在jar文件中包含一个jar文件。我正在寻找一种方法来解压缩指定为依赖项的jar,并将类文件打包到我的jar中。


答案 1

您可以使用带有“jar-with-dependencies”描述符的maven-assembly插件来执行此操作。这是来自我们的一个pom.xml的相关块,它就是这样做的:

  <build>
    <plugins>
      <!-- any other plugins -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>

答案 2

在 Maven 2 中,正确的方法是使用 Maven2 Assembly 插件,该插件具有预定义的描述符文件,您可以直接在命令行上使用:

mvn assembly:assembly -DdescriptorId=jar-with-dependencies

如果你想让这个jar可执行,只需将要运行的main类添加到插件配置中:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>my.package.to.my.MainClass</mainClass>
      </manifest>
    </archive>
  </configuration>
</plugin>

如果要在正常生成过程中创建该程序集,则应将单个目录-单个目标(目标只能从命令行运行)绑定到生命周期阶段(有意义),如下所示:assemblypackage

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <executions>
    <execution>
      <id>create-my-bundle</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        ...
      </configuration>
    </execution>
  </executions>
</plugin>

调整元素以满足您的需求(例如,使用口头的清单内容)。configuration


推荐