Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX项目的有效JAR签名_Java_Maven_Netbeans_Javafx 2_Maven 3 - Fatal编程技术网

JavaFX项目的有效JAR签名

JavaFX项目的有效JAR签名,java,maven,netbeans,javafx-2,maven-3,Java,Maven,Netbeans,Javafx 2,Maven 3,我一直在研究各种方法,使用Maven POM为JavaFX项目生成一个可运行的JAR文件。每个Stackoverflow问题都描述了相同的问题。令人沮丧的是,对于同一个目标,似乎有几种不同的解决方案 问题: java.lang.SecurityException:清单主属性的签名文件摘要无效 在命令行上执行JAR文件时出错。尽管Netbeans可以愉快地运行程序并调试程序 诊断 关于这一点,有几个Stackoverflow和论坛问题(下面是最有用的问题)。尽管这是一个已知的问题,但我还没有找到使

我一直在研究各种方法,使用Maven POM为JavaFX项目生成一个可运行的JAR文件。每个Stackoverflow问题都描述了相同的问题。令人沮丧的是,对于同一个目标,似乎有几种不同的解决方案

问题

java.lang.SecurityException:清单主属性的签名文件摘要无效

在命令行上执行JAR文件时出错。尽管Netbeans可以愉快地运行程序并调试程序

诊断

关于这一点,有几个Stackoverflow和论坛问题(下面是最有用的问题)。尽管这是一个已知的问题,但我还没有找到使用JavaFX的明确解决方案。这些答案中描述的过程与用于捆绑JavaFXJAR的JavaFxPackager工具无关:

  • 。。。这看起来最有希望,因为它也是一个JavaFX项目。到目前为止,这里也有同样的错误
常用方法: 这个问题的博文流行答案(撰写本文时为255票):适用于我们项目中的-JavaFX模块:

但是,当我们在构建JavaFXJAR文件的POM中放置相同的插件时,仍然会出现:“无效签名文件摘要”…”错误。具体来说,我放置了


  • 经过大量研究,我找到了一个使用JavaFX、Maven和NetBeans的解决方案

    我正在开发一个简单的REST客户端,它使用jersey和moxy来解码JSON。 添加依赖项后,moxy应用程序报告签名无效的错误

    我发现这取决于某些库的META-INF中是否存在签名文件ECLIPSE.RSAECLIPSE.SF。 在我的例子中是
    org.eclipse.persistence.moxy-2.5.0.jar
    org.eclipse.persistence.antlr-2.5.0.jar
    org.eclipse.persistence.asm-2.5.0.jar
    org.eclipse.persistence.core-2.5.0.jar

    Netbeans中的pom.xml表示运行两个单独的步骤。 第一个InvokeMaven依赖插件扩展所有外部jar。 第二种方法是使用execmaven插件调用javafxpacker来创建最终的jar文件,并最终运行它

    通过按顺序执行这两个步骤,org.eclipse库中的签名被放置在最终jar文件的META-INF中,这将在签名上生成错误

    我的解决方案是在maven依赖插件和execmaven插件的执行之间添加一个中间步骤。在这一步中,我将删除目录中的所有签名文件

    ${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>
    
    
    maven antrun插件
    1.8
    包裹
    跑
    
    我有一个非常类似的问题;当我在项目中包含一个签名JAR(bouncycastle)时。其签名被逐字重新打包,导致明显的安全异常:

    java.lang.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>
    
    
    org.apache.maven.plugins
    maven依赖插件
    2.8
    解包依赖项
    包裹
    解包依赖项
    META-INF/*.SF、META-INF/*.DSA、META-INF/*.RSA
    ...
    
    我省略了新的带有“excludes”模式的行之后的一些行。 这一行是我的解决方案-我包括其他行,以便您可以看到放置。(我在许多其他帖子中遇到了问题,这些帖子省略了标签的上下文,所以我试图为其他人省去这个麻烦)


    希望这能帮助其他有同样问题的人。

    最后!我已经用de shade插件忍受了好几个小时,但都没有用。我知道这种感觉——它激励我写下了这个答案。顺便说一句,如果一个罐子上有签名,通常是有原因的。考虑是否单独分配/安装JAR,而不是重新打包是有意义的。对于像BouncyCastle这样的加密提供程序,有一些很好的理由可以让您尝试将其单独保存并签名。
    <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>
    
    <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>