除了创建一个大的胖程序集之外,还有什么替代方法可以打包独立的Java应用程序,这在某些情况下非常糟糕
1)两个或多个罐子的资源路径中的冲突文件(具有相同的名称,例如reference.xml)会被幸运者覆盖。
2)如果不再提取,合并和压缩,则无法更换单个罐子。
在爆炸的war文件的行上是否有更多的解决方案,lib文件夹中的所有lib和包含清单条目的主类文件的jar。 我相信我已经在蚂蚁中完成了这一点,而且肯定也可以在maven中完成。
答案 0 :(得分:1)
汇编插件将是自定义描述符的好选择:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
在assembly.xml中:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>bin</id>
<formats>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>${project.artifactId}-${project.version}.jar</include>
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>/lib</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
</assembly>
所有依赖项都是项目jar文件旁边的lib目录中的单独jar。
答案 1 :(得分:0)
我倾向于使用Mojo's AppAssembler Maven Plugin进行分发,然后使用Maven Assembly Plugin将所有内容包装到包含分发的tar.gz
或zip
文件中。有时我会更进一步使用Mojo's Unix Maven Plugin来创建.deb
和.rpm
安装程序,我听过使用Mojo's NSIS Maven Plugin但需要Windows安装程序的人的好消息{{3我应该能够做类似的事情,之前当我需要生成Windows安装程序时,我编写了自己的WiX Maven插件,但其源代码仍然是我以前的雇主。
如果您走NPanday's WiX Maven plugin路线,我会怀疑您可能更喜欢flat
{{1}}