使用 Maven 在 jar 中包含依赖项

新手上路,请多包涵

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

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

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

原文由 racer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 420
2 个回答

您可以使用带有“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>

原文由 John Stauffer 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 Maven 2,正确的方法是使用 Maven2 Assembly Plugin ,它有一个用于此目的的 预定义描述符文件,您可以只在命令行上使用它:

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

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

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

如果要在正常构建过程中创建该程序集,则应将 单个目录单个 目标( assembly 目标只能从命令行运行)绑定到生命周期阶段( package 有道理),像这样:

 <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 元素以满足您的需要(例如使用清单内容作为口语)。

原文由 Pascal Thivent 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题