包括与Maven的罐子依赖

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

我有一个项目的构建成一个jar文件。 我想从依赖的类被复制到罐子也是如此。

更新:我知道,我不能只包含在一个jar文件中的jar文件。 我在寻找一种方式来解压被指定为依赖关系的罐子,类文件打包到我的罐子。

--------------解决方案-------------

你可以使用Maven组装插件与“罐子与 - 依赖”的描述符做到这一点。 下面是我们的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>
</project>

与Maven 2,以正确的方式做,这是使用Maven2的组装插件,它有这个目的,你可以在命令行中只需用一个预先定义的描述符文件:

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

如果你想使这个罐子的可执行文件,只需添加主类要运行的插件配置:

<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 ,以满足您的需求(例如,使用清单的东西,口语)元素。

如果你(像我)不特别喜欢JAR-与依赖性上方接近所述,Maven的解决方案,我宁愿是简单地构建一个WAR项目,哪怕它仅仅是一个独立的Java应用程序,您正在构建:

  1. 做一个正常的maven罐项目,将建立你的jar文件(不依赖)。
  2. 此外,建立一个maven战项目(只有一个空的webapp / WEB-INF / web.xml文件 ,这将避免在Maven的构建一个警告/错误),也只有你的罐子项目作为一个依赖,以及让你的JAR-项目<module>根据你的战争项目。 (此战项目只是一个简单的技巧来包装你所有的jar文件的依赖成一个zip文件。)
  3. 构建WAR项目产生战争文件。
  4. 在部署步骤,只需重命名你的.war文件以* .zip,并且将其解压缩。

你现在应该有一个lib目录(你可以将你想要的话)你的罐子和所有你需要运行你的应用程序的依赖关系:

java -cp 'path/lib/*' MainClass

(在类路径中通配符的Java 6或更高版本的作品)

我认为这是行家(无需惹大会插件左右),这两个简单的设置,也让你的应用程序结构的更清晰的视野(你会看到版本号在普通视图所有依赖罐子,和避免堵塞一切到一个JAR文件)。

有树荫Maven插件。 它可用于包装和重新命名的依赖关系(省略类路径上的依赖关系问题)。

您可以使用一个使用新创建的jar <classifier>标记。

<dependencies>
<dependency>
<groupId>your.group.id</groupId>
<artifactId>your.artifact.id</artifactId>
<version>1.0</version>
<classifier>jar-with-dependencies</classifier>
<type>jar</type>
</dependency>
</dependencies>

把Maven的一边,你可以把JAR库主罐里面,但你需要使用自己的类加载器。

检查项目:一JAR链接文本

这篇文章可能是有点老了,但我也有同样的问题最近。 建议由约翰·斯托弗第一个解决方案是一个很好的,但我有一些问题,因为我的工作在今年春天。 春天的依赖,罐子我使用有一些它们共享相同的路径和名称属性文件和XML-模式声明。 虽然这些罐子来自同一个版本, 罐子,有依赖性 Maven的目标是覆盖与论文中找到的最后一个文件文件。

最后,应用程序无法启动的春天罐子找不到正确的属性文件。 在这种情况下,解决方案建议通过罗普已经解决了我的问题。

也是从那时起,春季启动项目现在存在。 它通过提供过载包的目标,并提供了自己的类加载器的Maven目标来管理这个问题的一个非常酷的方式。 见春靴参考指南

分类:java的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.550 (s). 10 q(s)