Maven:构建 war 但部署不同的工件?
Maven: build war but deploy a different artifact?
我有一个构建 WAR 的 Maven 项目,然后将其打包成一个针对特定部署工具的 zip 文件。我不想上传 WAR,因为这会浪费 space。
是否可以在同一 pom 文件中构建 WAR 但仅 upload/deploy zip?
编辑:
不,上面提出的 "duplicate" 问题一点帮助也没有。我必须指定 <packaging>war</packaging>
,即使我不指定,只要我使用 Maven war 插件,它就会将 war 作为部署的一部分。
而且我还想要构建中的其他工件(源、测试等)。我只是不需要 war.
这是部署 war 或 zip 的建议方法,具体取决于需要:
- 默认构建仍会提供 WAR 作为输出
- 添加配置文件以跳过作为部署阶段的一部分的正常 Maven 部署插件执行,并添加进一步的执行(显然没有跳过)通过
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 部署插件的全局配置及其 skip
到 true
。它将有效地跳过 deploy
目标。进一步执行将处理 ZIP 文件。
使用上述方法,执行正常构建,Maven 将继续部署生成的WAR,同时打开配置文件如下:
mvn clean deploy -Pdeploy-zip
Maven 将跳过 Maven 部署插件的默认执行(其 deploy
目标)并在 deploy
阶段执行 deploy-file
目标。
作为构建的一部分,您将拥有:
[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ test-war-zip ---
[INFO] Skipping artifact deployment
[INFO]
[INFO] --- maven-deploy-plugin:2.8.2:deploy-file (deploy-zip) @ test-war-zip ---
Uploaded: http://the.repository.here (986 B at 3.9 KB/sec)
我有一个构建 WAR 的 Maven 项目,然后将其打包成一个针对特定部署工具的 zip 文件。我不想上传 WAR,因为这会浪费 space。
是否可以在同一 pom 文件中构建 WAR 但仅 upload/deploy zip?
编辑:
不,上面提出的 "duplicate" 问题一点帮助也没有。我必须指定 <packaging>war</packaging>
,即使我不指定,只要我使用 Maven war 插件,它就会将 war 作为部署的一部分。
而且我还想要构建中的其他工件(源、测试等)。我只是不需要 war.
这是部署 war 或 zip 的建议方法,具体取决于需要:
- 默认构建仍会提供 WAR 作为输出
- 添加配置文件以跳过作为部署阶段的一部分的正常 Maven 部署插件执行,并添加进一步的执行(显然没有跳过)通过
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 部署插件的全局配置及其 skip
到 true
。它将有效地跳过 deploy
目标。进一步执行将处理 ZIP 文件。
使用上述方法,执行正常构建,Maven 将继续部署生成的WAR,同时打开配置文件如下:
mvn clean deploy -Pdeploy-zip
Maven 将跳过 Maven 部署插件的默认执行(其 deploy
目标)并在 deploy
阶段执行 deploy-file
目标。
作为构建的一部分,您将拥有:
[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ test-war-zip ---
[INFO] Skipping artifact deployment
[INFO]
[INFO] --- maven-deploy-plugin:2.8.2:deploy-file (deploy-zip) @ test-war-zip ---
Uploaded: http://the.repository.here (986 B at 3.9 KB/sec)