Maven:避免在标准构建生命周期中部署项目包隐含工件

den*_*nov 5 java maven-2

是否可以避免在"deploy:deploy"处理期间部署根据项目打包构建的工件?

我的意思是:

  • 假设我们有一个用于Web应用程序的'pom.xml'并将包装类型定义为'war' ;
  • 我们要组装包含我们的应用程序的'*.war'工件或'*.zip'以及一个servlet容器;
  • 我们想在'deploy:deploy'处理期间只部署那个'*.zip'工件;

即我希望能够运行'mvn deploy'并具有以下结果:

  1. 'myapp.war'被建造;
  2. 构建'myapp-standalone.zip' ;
  3. 'myapp-standalone.zip'已部署到目标远程存储库(请注意,如果'myapp.war'已安装到本地存储库,我不会烦恼);

我检查了'war:war documentation'并找到了'primaryArtifact'参数.但是,它仅提到本地存储库.

我尝试了以下POM,但它仍然将'*.war''*.zip'部署到远程存储库:

<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>com.mygroup</groupId>
    <artifactId>myapp</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>myapp</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <!-- dependencies go here -->
    </dependencies>

    <build>
        <plugins>
            <! -- plugins like 'compiler' etc -->

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <primaryArtifact>false</primaryArtifact>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>myapp-standalone</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>src/main/assembly/standalone.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <distributionManagement>
        <repository>
            <-- target repository information -->
        </repository>
        <snapshotRepository>
            <-- target repository information -->
        </snapshotRepository>
    </distributionManagement>
</project>
Run Code Online (Sandbox Code Playgroud)

似乎我可以通过将项目打包声明为'pom'并手动配置'war'打包所暗示的所有mojos ('资源:资源','编译器:编译','资源:testResources','编译器:testCompile)来获得所需的行为','surefire:test','war:war','install:install','deploy:deploy').然而,这会使POM相当冗长,我想避免这种情况.

据我所知,Maven的方式是始终将项目打包类型隐含的工件作为项目工件之一.但是,如果他或她希望获得与任何默认打包类型不匹配的工件(例如单个'*.zip'存档),则不清楚Maven用户应该做什么.

有什么想法吗?

此致,丹尼斯

Pas*_*ent 8

根据Maven Deploy插件文档:

deploy:deploy用于自动安装工件,其pom以及特定项目生成的附加工件.[...]

所以我认为不可能阻止你的战争"按原样"部署.

但是,为了获得所需的效果,您可以在构建中添加一个特定的模块来负责生成程序集(程序集将依赖于war模块),并在war模块中配置deploy插件以跳过部署,如下所示:

         <plugin>
           <artifactId>maven-deploy-plugin</artifactId>
           <version>X.Y</version>
           <configuration>
             <skip>true</skip>
           </configuration>
         </plugin>
Run Code Online (Sandbox Code Playgroud)