我一直在研究使用Maven POM为JavaFX项目生成可运行JAR文件的各种方法。每个问题都描述了相同的问题。令人沮丧的是,对于同一个目标,似乎有几种不同的解决方案。
问题:
JAVAlang.SecurityException:清单主属性的签名文件摘要无效
在命令行上执行JAR文件时出错。虽然Netbean可以愉快地运行程序并调试程序。
诊断
关于这一点,有几个Stackoverflow和论坛问题(下面是最有用的问题)。尽管这是一个已知的问题,但我还没有找到使用JavaFX的明确解决方案。这些答案中描述的过程与用于打包JavaFX JAR的JavaFxPackager工具不同:
通常的方法:这个问题的热门答案(撰写本文时为255票):适用于我们项目中的非JavaFX模块:
然而,当我们在构建JavaFXJAR文件的POM中放入相同的插件时,仍然会得到:“无效的签名文件摘要…”错误具体来说,我把
Maven给出了:"清单主属性的无效签名文件摘要..."错误
**问题*:
如何打包JavaFX应用程序。这是POM
<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>
在尝试运行一个应用程序时,根据“无效签名文件”中的答案使用的
shard plugin
配置。jar目前看起来像这样:
<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包
在命令行上。这个问题似乎是一个常见的问题,我希望有人破解了JavFX绑定到JavaFX构建的其他JAR文件中的代码。
其他链接:
如何告诉maven shade插件保存签名
经过大量研究,我找到了一个使用JavaFX、Maven和NetBeans的解决方案。
我正在开发一个简单的REST客户端,它使用jersey和moxy来解码JSON。添加依赖项后,moxy应用程序报告无效签名错误。
我发现这取决于签名文件的存在。RSA和ECLIPSE。SF在一些库的META-INF中。我的例子是组织。日食坚持不懈moxy-2.5.0。jar
,组织。日食坚持不懈antlr-2.5.0。jar
,组织。日食坚持不懈asm-2.5.0。jar
和组织。日食坚持不懈core-2.5.0。jar
在Netbean中,您指出的pom.xml运行两个单独的步骤。第一个调用maven-依赖-插件来扩展所有外部jar。第二个使用exec-maven-plugin调用javafxPackager来创建最终的jar文件。最后运行它。
通过在org.eclipse库中按顺序执行这两个步骤,将其放置在最终jar文件的META-INF中,这将在签名上生成错误。
我的解决方案是在maven依赖插件和exec maven插件的执行之间添加一个中间步骤。在这一步中,我将删除目录中的所有签名文件
${project.build.directory}/classes
为此,我使用了一个插件maven antrun插件
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<delete>
<fileset dir="${project.build.directory}/classes" includes="**/META-INF/*.DSA"/>
<fileset dir="${project.build.directory}/classes" includes="**/META-INF/*.RSA"/>
<fileset dir="${project.build.directory}/classes" includes="**/META-INF/*.SF"/>
</delete>
</target>
</configuration>
</execution>
</executions>
</plugin>
我有一个非常类似的问题;当我在项目中包括一个签名的JAR(bouncycastle)时。它的签名被逐字重新打包,导致了一个明显的安全例外:
JAVAlang.SecurityException:清单主属性的签名文件摘要无效
各种过滤失败;对我有效的解决方案在pom.xml中是这样的:
<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>
<excludes>META-INF/*.SF,META-INF/*.DSA,META-INF/*.RSA</excludes>
...
</configuration>
</execution>
</executions>
</plugin>
我在新的带有“排除”模式的行之后省略了一些行。这一行是我的解决方案——我包含了其他行,这样你就可以看到位置。(我在许多其他帖子中遇到了麻烦,这些帖子省略了标签的上下文,所以我试着为其他人省去这个麻烦)。
希望能帮助其他有同样问题的人。
> DAO层类型:jar Rest服务层类型:war,依赖:DAO{scope:default,type:jar}
我正在尝试将javafx(. jar)文件导入到maven项目中。我用Netbean(Java了一个带有Ant的项目- 对此有什么解决办法吗? 我在网上查阅了好几篇帖子和指南,但都没有找到。 注意:在maven中实现. jar文件已解决。但代码不起作用。 当前错误:“运行应用程序com.mycompany.ep\u game\u ref.game命令执行失败时出现异常。”
我对这种方法有一些问题。它工作得很好,但有一个小问题。我叫这个方法的时间太少了。所以标签上只打印最后一个字符串。但我希望下一个字符串开始打印,只有在前一个字符串完成后。对不起我的英语
JavaFX使用FXML的MVC模型听起来很棒,但我不知道如何组织我的项目包。 我找到的关于JavaFX的每一个教程都过于简单和无条理:它们只是创建一个包,然后在其中创建所有内容,每个控制器、每个fxml、每个CSS。我不想那样。我希望一切都在正确的地方。 尽管如此,JavaFX的“路径”似乎...“限制”。URL的使用使得如果我想将我的资源限制在本地文件中,我必须执行整个操作。这很好,但是通过从
我读过一些教程, https://spring.io/guides/gs/spring-boot/ https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-gradle-plugin
PDF下载示例:https://drive.google.com/file/d/12wv1Pb7gh4vCKOGhX4cZ3aOrLSiOo4If/view?usp=sharing 因此,当PDF在A.Reader(连续版本)中打开时,它表示证书无效,因为对该文档所做的更改导致签名无效。 但我看不出有什么变化。我们自己的应用程序只添加了一个签名(证书),为数千个其他PDF添加了正确的签名。未执行其