Maven:构建战争但部署不同的工件?

时间:2016-01-26 14:33:45

标签: maven maven-3 pom.xml

我有一个maven项目,它构建一个WAR,然后将其打包成一个zip文件,该文件面向特定的部署工具。我不想上传WAR,因为它会浪费空间。

是否可以构建WAR,但只能在同一个pom文件中上传/部署zip?

编辑:

不,上面提出的“重复”问题没有丝毫帮助。我必须指定<packaging>war</packaging>,即使我不这样做,只要我使用maven war插件,就会将战争作为部署的一部分。

我还想要构建中的其他工件(源代码,测试等)。我只是不需要战争。

1 个答案:

答案 0 :(得分:3)

根据需要,以下是部署战争或拉链的建议方法:

  • 默认构建仍将提供WAR作为输出
  • 添加配置文件以跳过正常的Maven Deploy插件执行作为部署阶段的一部分,并添加进一步执行(显然不会跳过),仅通过deploy-file目标部署ZIP文件,如@Michal所示,但不是通过命令行(更好地作为构建的一部分)。

根据需要,您当然可以将默认行为从配置文件切换到默认构建,甚至可以删除默认构建(只是WAR)。

一个例子:

<build>
    <finalName>test-war-zip</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4.1</version>
            <configuration>
                <descriptor>src/assembly/descriptor.xml</descriptor>
            </configuration>
            <executions>
                <execution>
                    <id>create-zip</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        <id>deploy-zip</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                    <executions>
                        <execution>
                            <id>deploy-zip</id>
                            <phase>deploy</phase>
                            <goals>
                                <goal>deploy-file</goal>
                            </goals>
                            <configuration>
                                <skip>false</skip>
                                <file>${project.build.directory}/your.file.here</file>
                                <repositoryId>your.id.here</repositoryId>
                                <url>http://something.here</url>
                                <groupId>${groupId}</groupId>
                                <artifactId>${artifactId}</artifactId>
                                <version>${version}</version>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

请注意Maven Deploy插件及其skiptrue的全局配置。它将有效地跳过deploy目标。进一步执行将处理ZIP文件。

通过上述方法,执行正常构建,Maven将继续部署生成的WAR,同时按如下方式打开配置文件:

mvn clean deploy -Pdeploy-zip

Maven将跳过默认执行Maven Deploy插件(其deploy目标)并在deploy-file阶段执行deploy目标。

作为构建的一部分,您将拥有:

  

[INFO] --- maven-deploy-plugin:2.8.2:deploy(default-deploy)@ test-war-zip ---
  [INFO]跳过工件部署
  [INFO]
  [INFO] --- maven-deploy-plugin:2.8.2:deploy-file(deploy-zip)@ test-war-zip ---
  上传:http://the.repository.here(986 B,3.9 KB /秒)