【发布时间】:2014-06-06 16:24:02
【问题描述】:
我在我的 java 应用程序中使用了几个库。
在 pom.xml 中,proguard maven 插件像这样包含它们:
<inclusion>
<groupId>javafx</groupId>
<artifactId>jfxrt</artifactId>
<library>true</library>
<filter>!META-INF/**</filter>
</inclusion>
我注意到,只有当我包含 <library> 设置为 true 的库时,清单文件才会被替换,尽管我为所有库指定了 <filter>。
但我需要将它们包含在内,并将 <library> 设置为 true,否则其中一些将不起作用。
现在在构建 jar 之后,它不会启动,因为 Manifest 不再包含主类的路径。
我找到了两种方法来解决这个问题。但是,两者都不起作用。
第一种方法:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<phase>install</phase>
<configuration>
<tasks>
<echo
message="Adding Manifest to ${project.build.directory}/${my.outfilename}.jar" />
<manifest file="META-INF/MANIFEST.MF" mode="replace">
<attribute name="Manifest-Version" value="1.0" />
<attribute name="Package"
value="com.xyz.mypackage" />
<attribute name="Main-Class" value="MyMainClass" />
<attribute name="Version"
value="${my.version.main}${my.version.sub}" />
</manifest>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
什么都没有发生。我已经设置<phase> 来安装和部署。两者都没有效果。
第二种方法:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>deploy</phase>
<configuration>
<archive>
<manifestFile>${basedir}/build/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</execution>
</executions>
</plugin>
这也不会改变任何事情。即使使用 -X 来获得调试输出,我也看不到其中一个插件曾经被执行过。两个<plugin> 部分都在<build><plugins></plugins></build> 内
现在我真的卡住了,因为在构建 jar 之后手动更改 Manifest 文件在自动构建过程中是不可接受的。
希望您能提供帮助。谢谢!
【问题讨论】:
标签: maven replace manifest proguard overwrite