程序配置
通过IDEA的默认的Package 打包出来的程序我发现会报错
jar中没有主清单属性
只是因为Jar中缺失了配置启动类的MANIFEST.MF
文件
这里通过Maven插件的打包,就可以避免这个问题。
对应的Maven 插件POM配置如下
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.hznu.test.App</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
使用Maven命令
mvn clean package
或IDEA工具栏都可以打包
错误情况
注意打包出来的程序可能会因为签名验证不对导致无法运行,所以这里打包排除了存储签名相关的文件。
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
如果没有排除,可能会导致签名验证失败的异常,导致无法运行程序,出现下面异常
错误信息: Invalid signature file digest for Manifest main attributes
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
at sun.security.util.SignatureFileVerifier.process(Unknown Source)
at java.util.jar.JarVerifier.processEntry(Unknown Source)
at java.util.jar.JarVerifier.update(Unknown Source)
...
参考文献
[1] 简书. data4. 2016.11. https://www.jianshu.com/p/7a0e20b30401