Maven程序集 - 如何使用包含的版本创建项目JAR,但是没有的工件tar.gz文件?

时间:2014-11-17 17:59:06

标签: java maven maven-assembly-plugin

使用Maven我想创建1)我当前项目的JAR文件,当前版本包含在文件名myproject-version.jar中,以及2)tar.gzip格式的整体工件包含项目&#39 ; s目录中的JAR文件和所有依赖项JAR以及bin目录中的各种驱动程序脚本,但名称中没有版本号或任意ID。我有点使用程序集插件工作,因为如果我使用下面的pom.xml和assembly.xml,那么当我运行&m; mvn package'我可以根据需要获得包含JAR和脚本的tar.gzip文件,但是我似乎无法正确地命名/版本化 - 要么我同时获得了项目的JAR文件, tar.gzip文件的版本号是否取决于所使用的build / finalName。我如何单独指定这些,如果没有附加到工件名称的ID,是否无法构建最终工件?例如,我希望将我的项目的JAR文件命名为myproject-0.0.1-SNAPSHOT.jar,以及整个" uber"工件名为myproject.tar.gz(没有版本号或附加到名称的附加ID)。这可能吗?

我当前的pom.xml和asssembly.xml包含在下面。

的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>mygroup</groupId>
    <artifactId>myproject</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>myproject</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.3</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/maven/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>    
</project>

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>
    <fileSets>
        <!-- the following file set includes the Python scripts/modules used to drive the monthly processing runs -->
        <fileSet>
            <directory>src/main/python</directory>
            <outputDirectory>bin</outputDirectory>
            <includes>
                <include>indices_processor.py</include>
                <include>concat_timeslices.py</include>
            </includes>
        </fileSet>
        <!-- the following file set includes the JAR artifact built by the package goal -->
        <fileSet>
            <directory>target</directory>
            <outputDirectory>lib</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
    <dependencySets>
        <!-- the following dependency set includes the dependency JARs needed by the main Java executable for indicator processing -->
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <scope>runtime</scope>
            <unpack>false</unpack>
        </dependencySet>
    </dependencySets>
</assembly> 

提前感谢任何建议。

2 个答案:

答案 0 :(得分:2)

只需使用${project.artifactId}作为装配配置中finalName的值。

从您的配置派生的示例(请注意配置中的finalName元素):

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4.1</version>
            <configuration>
                <descriptors>
                    <descriptor>src/main/maven/assembly.xml</descriptor>
                </descriptors>
                <finalName>${project.artifactId}</finalName>
            </configuration>
            ...
        </plugin>

finalName如果您没有更改,那么程序集默认为${project.build.finalName}${project.build.finalName}的默认值为${project.artifactId}-${project.version}

答案 1 :(得分:1)

我认为你正在寻找这个: http://maven.apache.org/plugins/maven-assembly-plugin/single-mojo.html#finalName 把它放在插件的配置中。 但是,如果您计划将其上传到某个存储库,我认为您不应该删除该版本。