1

除了创建一个大的胖程序集之外,还有什么方法可以打包一个独立的 java 应用程序,这在某些情况下是可怕的,因为

1) 两个或多个 jar 的资源路径中的冲突文件(具有相同的名称,例如 reference.xml)被幸运者覆盖。

2) 如果不重新提取、合并和压缩,则无法更换单个 jar。

是否有更多关于爆炸战争文件的解决方案,所有库都在 lib 文件夹中,主类文件的 jar 包含清单条目。我确信我已经在 ant 中做到了这一点,并且肯定也可以在 maven 中完成。

4

2 回答 2

2

装配插件将是带有自定义描述符的不错选择:

<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 中。

于 2012-08-23T07:54:10.927 回答
1

我倾向于使用Mojo 的 AppAssembler Maven 插件来制作发行版,然后使用Maven 装配插件将所有内容包装到一个tar.gzzip包含发行版的文件中......有时我会更进一步并使用Mojo 的 Unix Maven 插件来创建.deb.rpm安装程序,并且我从需要使用Mojo 的 NSIS Maven 插件的Windows 安装程序的人那里听到了好消息,尽管Npanday 的 WiX Maven 插件应该能够做类似的事情,以前当我需要生成 Windows 安装程序时,我编写了自己的 WiX Maven 插件,但是源代码因为我以前的雇主仍然如此。

如果你走AppAssembler路线,我怀疑你可能更喜欢repositoryLayoutflat

于 2012-08-23T08:46:01.980 回答