适用于 JavaFX 项目的有效 JAR 签名
我一直在研究各种配方,以使用Maven POM为JavaFX项目生成可运行的JAR文件。这些 Stackoverflow 问题中的每一个都描述了相同的问题。令人沮丧的是,似乎有几种不同的解决方案可以实现同一目标。
问题:
java.lang.SecurityException:Manifest main attributes 的签名文件摘要无效
在命令行上执行 JAR 文件时出错。尽管 Netbean 可以愉快地运行程序并调试程序。
诊断
关于这一点,有几个Stackoverflow和论坛问题(下面最有帮助的问题)。尽管这是一个已知的问题,但我还没有找到一个明确的解决方案来使用JavaFX。这些答案中描述的过程与用于捆绑JavaFX JAR的JavaFxPackager工具无关:
- “无效的签名文件摘要”错误通过 Maven 添加 Janino 包
- 错误 (org.codehaus.mojo) 当添加持久性到 Maven-Java-project?...这看起来是最有前途的,因为它也是一个JavaFX项目。到目前为止,这里也有同样的错误。
通常的方法:这个问题的流行答案(在撰写本文时为255票):适用于我们项目中的非JavaFX模块:
但是,当我们在构建JavaFX JAR文件的POM中放置相同的插件时,我们仍然会得到:“无效的签名文件摘要......”错误。具体来说,我把第一个放在JavaFxPackager执行规则之前和之后。结果是<artifactId>maven-shade-plugin</artifactId>
- Maven 给出了:“清单主要属性的无效签名文件摘要...”错误
**问题*:
如何设法打包JavaFX应用程序。这是 JavaFX 的 POM Netbeans 设置:<build> section
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<excludeScope>system</excludeScope>
<excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${java.home}/../bin/javafxpackager</executable>
<arguments>
<argument>-createjar</argument>
<argument>-nocss2bin</argument>
<argument>-appclass</argument>
<argument>${mainClass}</argument>
<argument>-srcdir</argument>
<argument>${project.build.directory}/classes</argument>
<argument>-outdir</argument>
<argument>${project.build.directory}</argument>
<argument>-outfile</argument>
<argument>${project.build.finalName}.jar</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>default-cli</id>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${java.home}/bin/java</executable>
<commandlineArgs>${runfx.args}</commandlineArgs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:unchecked</compilerArgument> <!-- all -->
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
<compilerArguments>
<bootclasspath>${sun.boot.class.path}${path.separator}${java.home}/lib /jfxrt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<additionalClasspathElements>
<additionalClasspathElement>${java.home}/lib/jfxrt.jar</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
</plugins>
</build>
尝试运行.jar时,基于“无效的签名文件”中的答案使用的配置目前如下所示:shard plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<!-- http://maven.apache.org/plugins/maven-shade-plugin/ -->
<!-- http://docs.codehaus.org/display/MAVENUSER/Shade+Plugin -->
<!-- http://zhentao-li.blogspot.com.au/2012/06/maven-shade-plugin-invalid-signature.html -->
<version>2.3</version>
<executions>
<execution>
<id>remove-sign-files</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>classes/META-INF/*.SF</exclude>
<exclude>classes/META-INF/*.DSA</exclude>
<exclude>classes/META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
为了尽可能地将 Netbean 排除在等式之外,我只是运行
- mvn package
在命令行上。这个问题似乎是一个常见的问题,我希望有人已经破解了JavFX捆绑在其他JAR文件中的代码,用于JavaFX构建。
其他链接: