我正在尝试为使用maven构建自动化解决方案。我的愿景是有一个Maven构建,它从我的项目创建JAR文件,然后将所有依赖项作为JAR复制到“目标”文件夹中的某个子目录。如何为具有外部依赖关系的Java项目配置Maven构建?
我不想使用Shade或Assembly(所以我不想提取其他JAR的内容并将它包含在一个“super-JAR”中,因为项目更复杂,并且当我包括一个文件中的所有JAR)。
我该怎么做这样的构建POM?
我正在尝试为使用maven构建自动化解决方案。我的愿景是有一个Maven构建,它从我的项目创建JAR文件,然后将所有依赖项作为JAR复制到“目标”文件夹中的某个子目录。如何为具有外部依赖关系的Java项目配置Maven构建?
我不想使用Shade或Assembly(所以我不想提取其他JAR的内容并将它包含在一个“super-JAR”中,因为项目更复杂,并且当我包括一个文件中的所有JAR)。
我该怎么做这样的构建POM?
我在这里没有看到任何问题。只需创建与<packaging>jar</packaging>
maven pom.xml默认情况下,它不应该打包到你的jar所有依赖库。
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
没有问题,我只是失败(很长一段时间),以抓住Maven配置和我没有时间正确研究它,因为其他工作。 :-(谢谢,这基本上就是答案,现在我只需要弄清楚如何在同一步骤中添加清单,但是我认为我可以处理这个问题,谢谢! – 2013-02-19 13:09:05
对于初学者来说最有价值的提示我可以提供建议 - 尝试'mvn archetype:generate'。在那里你可以为不同类型的项目准备好maven的设置 – 2013-02-19 13:14:26
您可以使用maven组件,插件创建从您的目录中选择的其他文件的.zip文件。我使用这种方法为项目创建分发zip文件。 maven-assembly-plugin documentation中有几个示例。
谢谢你的回答,但不是这样。Assembly插件是创建分发包的最后一步。但是我只需要首先将依赖关系收集到一个目录中 – 2013-02-19 13:12:38
与最新的评论相关,使用这个插件添加主类的清单:
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.test.YourMainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
谢谢,我已经明白了,并且,由于java -jar以某种方式覆盖(?)java -cp,我最终使用了java -cp“project-jarfile .jar; lib/*“mainClass无论如何。 – 2013-02-19 14:03:21
所有的依赖复制到目标/ lib目录当你做一个Maven构建。 – 2013-02-19 13:00:28
@AjayGeorge很大程度上取决于''.. OP声明他构建了一个JAR,因此他的'target/lib'中没有任何内容。 @Miroslav我很好奇你为什么不想使用程序集插件? –
2013-02-19 13:12:06
@ AndersR.Bystrup你的意思是建立一个单一的superjar文件?这将是最好的,但我一直在努力处理被覆盖/跳过的文件(目前为止,该项目有68个外部JARs) - 即使Shade没有帮助...所以我最终得到了一个搞砸的JAR文件正确地开始...正如我在我接受的答案下面的评论中所说的,我正在努力应对Maven配置。 – 2013-02-19 13:16:01