除了创建一个大的胖程序集之外,还有什么方法可以打包一个独立的 java 应用程序,这在某些情况下是可怕的,因为
1) 两个或多个 jar 的资源路径中的冲突文件(具有相同的名称,例如 reference.xml)被幸运者覆盖。
2) 如果不重新提取、合并和压缩,则无法更换单个 jar。
是否有更多关于爆炸战争文件的解决方案,所有库都在 lib 文件夹中,主类文件的 jar 包含清单条目。我确信我已经在 ant 中做到了这一点,并且肯定也可以在 maven 中完成。
除了创建一个大的胖程序集之外,还有什么方法可以打包一个独立的 java 应用程序,这在某些情况下是可怕的,因为
1) 两个或多个 jar 的资源路径中的冲突文件(具有相同的名称,例如 reference.xml)被幸运者覆盖。
2) 如果不重新提取、合并和压缩,则无法更换单个 jar。
是否有更多关于爆炸战争文件的解决方案,所有库都在 lib 文件夹中,主类文件的 jar 包含清单条目。我确信我已经在 ant 中做到了这一点,并且肯定也可以在 maven 中完成。
装配插件将是带有自定义描述符的不错选择:
<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 中。
我倾向于使用Mojo 的 AppAssembler Maven 插件来制作发行版,然后使用Maven 装配插件将所有内容包装到一个tar.gz
或zip
包含发行版的文件中......有时我会更进一步并使用Mojo 的 Unix Maven 插件来创建.deb
和.rpm
安装程序,并且我从需要使用Mojo 的 NSIS Maven 插件的Windows 安装程序的人那里听到了好消息,尽管Npanday 的 WiX Maven 插件应该能够做类似的事情,以前当我需要生成 Windows 安装程序时,我编写了自己的 WiX Maven 插件,但是源代码因为我以前的雇主仍然如此。
如果你走AppAssembler路线,我怀疑你可能更喜欢repositoryLayoutflat