我正在从蚂蚁转向maven。
为了简单起见,我的应用程序是一个连接到数据库的swing应用程序。
我希望将它打包在一个jar文件中
该应用程序需要一个外部库,即Microsoft sql server库,包含在一个jar文件中:sqljdbc4-3.0.jar。
所以我试图包含这个库:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>3.0</version>
</dependency>
但是在启动jar时,我得到了例外:
java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
此问题已在其他stackoverflow问题中记录;我正在谈论这个只是为了达到目的。 我的想法(也许是天真的)如下,我想
搜索一下,我发现每个问题都是由不同的maven插件执行的:jar插件,依赖插件和程序集插件。
这是要走的路吗?我感觉不对,因为我不喜欢maven会轻易处理“常规”配置,这三个插件的解决方案似乎有点过于复杂。
答案 0 :(得分:5)
您需要将这些插件添加到pom
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</configuration>
</plugin>
的src /主/组件/ assembly.xml
<assembly>
<id>assembly</id>
<formats>
<format>zip</format>
</formats>
<dependencySets>
<dependencySet>
<outputDirectory>/lib</outputDirectory>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
</assembly>
运行程序集
mvn clean package assembly:single
答案 1 :(得分:1)
这是maven方式。顺便说一下:jar插件和依赖插件总是包含在maven构建中,不需要配置它们。
另外一个很好的帮助可能是appassembler创建一个可分发的包括所有需要的jar文件。