如何在桌面应用程序的pom.xml中只配置一次

我正在使用maven制作一个swing应用程序,并且我试图将pom.xml保持在紧密的状态(这个文件在粘贴到谷歌后我们发现的任何东西后都会变成一堆垃圾)。

我的pom是jar,我使用带有“jar-with-dependencies”描述符的maven-assembly-plugin。 所以我需要定义两次我的项目部分(主类和版本),一次用于普通jar,另一次用于jar-with-dependencies。

我认为问题来自jar-with-dependencies程序集描述符,而不是解压缩普通的jar并融合清单,它从$ {project.build.outputDirectory}创建了一个新的jar,这对我来说很奇怪。

有没有人有一个紧凑而优雅的想法,以避免重复我的清单配置?

谢谢,尼古拉斯。

您可以配置程序集和jar插件以使用[特定清单文件。 从程序集文档的Creating a Executable Jar部分:

毫无疑问,无论如何,Assembly Plugin都是为项目创建自包含二进制工件的一种非常有用的方法。 但是,一旦你创建了这个自包含的jar,你可能希望能够使用-jar JVM开关来执行它。

为了适应这种情况,Assembly Plugin支持配置与maven-jar-plugin支持的元素相同的元素(请参阅参考资料)。 使用此配置,可以轻松配置jar清单的Main-Class属性:

请注意,您定义的清单与生成的内容合并。 从引用的jar页面:

您自己的清单文件的内容将与Maven Archiver生成的条目合并。 如果在自己的清单文件中指定一个条目,它将覆盖Maven Archiver生成的值。

以下配置将程序集插件执行绑定到pre-integration-test阶段(程序包之后的下一个阶段),还将包括在src / main / resources / META-INF下定义的MANIFEST.MF。

因此,遵循此方法,您可以在MANIFEST.MF中定义公共清单内容,并将它们合并到最终清单中。

src / main / resources / META-INF / MANIFEST.MF的内容

 Created-By: Me Foo: bar Main-Class: com.foo.bar.MyMainClass Bundle-Version: 4.0.0 

更新:根据有关使用addDefaultSpecificationEntries的注释,建议的方法将与jar插件生成的jar上的规范一起使用。 但是,看起来程序集插件还不支持合并其他声明 。 jar插件将来自src / main / resources的清单与另外指定的值合并,以在我的测试项目中提供此内容:

 Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Me Built-By: Rich Seller Build-Jdk: 1.5.0_15 Specification-Title: Unnamed - org.test:test:jar:1.0.0 Specification-Version: 1.0.0 Implementation-Title: Unnamed - org.test:test:jar:1.0.0 Implementation-Version: 1.0.0 Implementation-Vendor-Id: org.test Foo: bar Main-Class: com.foo.bar.MyMainClass Bundle-Version: 4.0.0 

而assembly-plugin的输出是:

 Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Me Foo: bar Main-Class: com.foo.bar.MyMainClass Bundle-Version: 4.0.0 

配置:

  maven-assembly-plugin   jar-with-deps pre-integration-test  single      jar-with-dependencies   ${manifest.file}   true true      maven-jar-plugin 2.2   ${manifest.file}  true true     ...  src/main/resources/META-INF/MANIFEST.MF