替代maven组装:单个包装

时间:2012-08-23 07:18:16

标签: java maven maven-assembly-plugin

除了创建一个大的胖程序集之外,还有什么替代方法可以打包独立的Java应用程序,这在某些情况下非常糟糕

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

2)如果不再提取,合并和压缩,则无法更换单个罐子。

在爆炸的war文件的行上是否有更多的解决方案,lib文件夹中的所有lib和包含清单条目的主类文件的jar。 我相信我已经在蚂蚁中完成了这一点,而且肯定也可以在maven中完成。

2 个答案:

答案 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.gzzip文件中。有时我会更进一步使用Mojo's Unix Maven Plugin来创建.deb.rpm安装程序,我听过使用Mojo's NSIS Maven Plugin但需要Windows安装程序的人的好消息{{3我应该能够做类似的事情,之前当我需要生成Windows安装程序时,我编写了自己的WiX Maven插件,但其源代码仍然是我以前的雇主。

如果您走NPanday's WiX Maven plugin路线,我会怀疑您可能更喜欢flat {{1}}