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

时间:2009-10-13 10:28:56

标签: java maven-2

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

我的意思是:

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

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

  1. 'myapp.war'已构建;
  2. 'myapp-standalone.zip'已构建;
  3. 'myapp-standalone.zip'部署到目标远程存储库(请注意,如果将'myapp.war'安装到本地,我不会打扰存放在这里);
  4. 我检查了'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>
    

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

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

    有什么想法吗?

    问候,丹尼斯

1 个答案:

答案 0 :(得分:8)

根据Maven Deploy Plugin文档:

  

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

所以我认为没有可能阻止你的战争“按原样”部署。

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

         <plugin>
           <artifactId>maven-deploy-plugin</artifactId>
           <version>X.Y</version>
           <configuration>
             <skip>true</skip>
           </configuration>
         </plugin>