不使用artifactId来安装Maven生成的工件

时间:2019-10-27 05:20:31

标签: maven

我有一个带有2个模块的Maven父项目。构建父项目时,我想使用与pom.xml中使用的artifactId不同的名称来生成并安装最终的工件。我可以看到生成的工件确实具有要在构建目录中使用的名称。但是,当将存档安装在本地Maven存储库中时,maven-install-plugin使用项目的artifactId复制工件。如何在不使用artifactId的情况下配置插件以安装工件?

我的子项目的pom.xml:

<project>
   <parent>
      <groupId>com.mycomp</groupId>
      <artifactId>com-mycomp</artifactId>   
      <version>12.0.0.0.0</version>
   </parent>

   <modelVersion>4.0.0</modelVersion>
   <groupId>com.mycomp</groupId>
   <artifactId>child1</artifactId>
   <version>12.0.0.0.0</version>

   <build>
      <defaultGoal>install</defaultGoal>
      <finalName>${parent.artifactId}-${project.version}</finalName>
      <plugins>
           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <includeScope>runtime</includeScope>
                       <outputDirectory>${project.build.directory}/dependencies/</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>assembly:package</id>
                        <phase>package</phase>
                        <goals>
                                <goal>single</goal>
                        </goals>
                        <configuration>
                                <appendAssemblyId>false</appendAssemblyId>
                                <descriptors>
                  <descriptor>src/main/resources/dependencies.xml</descriptor>
                                </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

                        <plugin>
                           <groupId>org.apache.maven.plugins</groupId>
                           <artifactId>maven-jar-plugin</artifactId>
                           <version>3.1.2</version>
                           <configuration>
                               <archive>
                                   <manifest>
                                       <classpathPrefix>libs/</classpathPrefix>
                                       <addClasspath>true</addClasspath>
                                       <mainClass>com.my.MainClass</mainClass>
                                   </manifest>
                               </archive>
                           </configuration>
                       </plugin>

      </plugins>
   </build>
</project>

父pom.xml:

<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.mycomp</groupId>
   <artifactId>com-mycomp</artifactId>   
   <version>12.0.0.0.0</version>
   <packaging>pom</packaging>

   <modules>
     <module>child1</module>
     <module>child2</module>
   </modules>
   :
   :
</project>

所需的mvn clean install输出: 1)本地maven存储库中的com-mycomp-12.0.0.0.0.jar 2)com-mycomp-12.0.0.0.0.zip,包含上述jar及其依赖项。

观察到的行为: 3)在构建目录中创建com-mycomp-12.0.0.0.0.jar。但是它作为child1-12.0.0.0.0.jar安装在maven存储库中 4)在构建目录中创建com-mycomp-12.0.0.0.0.zip。但是它以child1-12.0.0.0.0.zip

的形式安装在maven存储库中。

如何实现所需的行为(#1和#2)?

1 个答案:

答案 0 :(得分:0)

本地存储库中的工件始终使用其artifactId进行安装。

您无法更改。即使您可以,我也强烈建议您这样做,因为您超出了期望。

如果要创建一个包含具有依赖项的jar的附加zip,则不需要第二个模块。您可以通过Assembly插件创建它,并附加一个dependencies这样的分类器。然后,您有两个工件,例如

com-mycomp-12.0.0.0.0.jar
com-mycomp-12.0.0.0.0-dependencies.zip