使用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>
提前感谢任何建议。
答案 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 把它放在插件的配置中。 但是,如果您计划将其上传到某个存储库,我认为您不应该删除该版本。