我在我的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文件是不可接受的。
希望你能提供帮助。谢谢!
答案 0 :(得分:1)
我花了好几天才弄明白这一点。实际上它很简单:
在proguard-maven-plugin的<configuration>
部分中添加以下内容:
<archive>
<manifest>
<mainClass>MyMainClass</mainClass>
<packageName>com.xyz.abc</packageName>
</manifest>
</archive>
这将在Manifest中添加一行,其中包含指定的Main类