我有一些示例RESTful客户端项目,这些项目与我正在处理的RESTful Java Web服务一起提供。基本上,不应该构建这些项目,而是将其压缩并包含在war文件中,以便在部署war文件时它们可用作静态资源。这样可以轻松地更新示例客户端以及实际的Java Web服务,并保证它们一起部署。
我已经能够使用maven程序集插件创建一个zip文件,但该阶段在战争阶段后执行。我无法找出创建zip文件所需的maven咒语,然后将其添加到war文件中。
这是我到目前为止所做的,但它只做了大约一半的工作。此外,我需要移动ExampleProject目录,以便解压缩的文件不会进入最终的war文件。
的pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptor>src/assembly/AssembleExamples.xml</descriptor>
<finalName>examples.zip</finalName>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
AssembleExamples.xml
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>bin</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.basedir}/WebContent/docs/</directory>
<outputDirectory/>
<includes>
<include>ExampleProject/pom.xml</include>
<include>ExampleProject/src/**</include>
</includes>
</fileSet>
</fileSets>
</assembly>
答案 0 :(得分:1)
其中两个插件maven-war-plugin
和maven-assembly-plugin
需要在同一阶段package
执行。首先是maven-assembly-plugin
,然后是maven-war-plugin
。您需要按以下顺序添加插件,以确保它们以相同的阶段和正确的顺序运行:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0.1</version>
<executions>
<execution>
<id>prepare-war</id>
<phase>package</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptor>src/assembly/AssembleExamples.xml</descriptor>
<finalName>examples.zip</finalName>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
您可以使用war
生成mvn package
。
答案 1 :(得分:0)
以下是我最终如何做到这一点。
感谢Mithun,我意识到有两种配置war插件的方法,而我这样做的方式并不适合我的情况。
这是我添加到我的pom文件中的内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<configuration>
<descriptor>src/assembly/AssembleJavaExample.xml</descriptor>
<finalName>myexample</finalName>
<appendAssemblyId>false</appendAssemblyId>
<outputDirectory>${project.build.directory}/${project.build.finalName}/docs</outputDirectory>
</configuration>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>true</failOnMissingWebXml>
<warName>mywar</warName>
<warSourceExcludes>docs/myexample/**</warSourceExcludes>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
程序集插件必须先行,以便在war插件之前执行。程序集插件创建zip文件并将其放在war插件用于创建war文件的目录中(outputDirectory配置)。然后我不得不将示例源排除在war文件中(warSourceExcludes配置)。我不确定这是不是最好的方法,但它似乎运作得很好。