Maven Assembly to tar文件的组合

时间:2015-03-26 05:55:02

标签: maven maven-assembly-plugin

我正在使用以下程序集文件生成一个jar文件:

<assembly>
    <id>job</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <unpack>false</unpack>
            <scope>runtime</scope>
            <outputDirectory>lib</outputDirectory>
            <excludes>
                <exclude>${groupId}:${artifactId}</exclude>
            </excludes>
        </dependencySet>
        <dependencySet>
            <outputDirectory></outputDirectory>
            <unpack>true</unpack>
            <includes>
                <include>${groupId}:${artifactId}</include>
            </includes>
        </dependencySet>
    </dependencySets>
</assembly>

我尝试将以下内容添加到扩展名中,并将格式字段更改为jar中的tar。它只是创建了一个tar而不是jar,这是没用的。

<files>
    <file>
        <source>${project.basedir}/runConcept.sh</source>
        <outputDirectory></outputDirectory>
        <filtered>true</filtered>
        <fileMode>0755</fileMode>
        <lineEnding>unix</lineEnding>
    </file>
</files>

如何使用jar和shell脚本准备tar文件。因此,当我解开时,它应该有一个jar和shell脚本。

1 个答案:

答案 0 :(得分:0)

如果我理解得很好,你想创建一个tar,它会在你的项目的根目录下有一个脚本runConcept.sh,而这个jar会包含你的项目代码及其依赖项在lib文件夹中的依赖关系。

我看到(我认为)的问题是,当你想要执行你的主jar时,类加载器将无法在你的jar中找到库然后将无法执行它。
但如果你仍然想以这种方式尝试,这就是我要做的。 (之后你可以找到其他解决方案)

  

解决方案编号1 ......

使用从插件的maven-assembly-plugin程序集中复制的程序集文件首次执行jar-with-dependencies,并将属性unpack设置为 false outputDirectory设置到我想要的位置,例如:

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>jar-with-dependencies-packed</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>false</unpack>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
</assembly>

再次执行将在前一个之后执行的maven-assembly-plugin(否则我们将无法包含jar ^^),您只需要包含脚本和jar < / p>

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>job</id>
    <formats>
        <format>tar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <files>
        <file>
            <source>src/main/scripts/runConcept.sh</source>
            <outputDirectory></outputDirectory>
            <filtered>true</filtered>
            <fileMode>0755</fileMode>
            <lineEnding>unix</lineEnding>
        </file>
    </files>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/assembly-test/</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>
  

解决方案编号2 ......

由于我认为1号解决方案可能不起作用,我会创建一个经典的jar-with-dependencies,我将在tar中包含脚本。

  

解决方案编号3 ......

因为你需要它,所以有一个名为One-JAR的maven插件,它可以处理jar内部jar的构建,然后运行程序集来构建你的tar。

请参阅:http://one-jar.sourceforge.net/