我有一个maven项目,它构建一个WAR,然后将其打包成一个zip文件,该文件面向特定的部署工具。我不想上传WAR,因为它会浪费空间。
是否可以构建WAR,但只能在同一个pom文件中上传/部署zip?
编辑:
不,上面提出的“重复”问题没有丝毫帮助。我必须指定<packaging>war</packaging>
,即使我不这样做,只要我使用maven war插件,就会将战争作为部署的一部分。
我还想要构建中的其他工件(源代码,测试等)。我只是不需要战争。
答案 0 :(得分:3)
根据需要,以下是部署战争或拉链的建议方法:
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插件及其skip
到true
的全局配置。它将有效地跳过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 /秒)