Maven ear插件多工件内容
假设我有一个web项目和几个可以部署它的环境。我希望Maven一次构建几个工件(例如,用于开发产品)。我有一个A-war模块和一个A-ear模块(其中包含A-war)。每个战争工件都可能包含仅与其环境相关的信息 首先,我为a-war模块配置了一个pom.xml文件:Maven ear插件多工件内容,maven,war,environment,ear,Maven,War,Environment,Ear,假设我有一个web项目和几个可以部署它的环境。我希望Maven一次构建几个工件(例如,用于开发产品)。我有一个A-war模块和一个A-ear模块(其中包含A-war)。每个战争工件都可能包含仅与其环境相关的信息 首先,我为a-war模块配置了一个pom.xml文件: <build> <pluginManagement> <plugins> <plugin> <ar
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>package-prod</id>
<phase>package</phase>
<configuration>
<classifier>prod</classifier>
<webappDirectory>${project.build.directory}/${project.build.finalName}-prod</webappDirectory>
<webResources>
<resource>
<directory>src/env/prod</directory>
</resource>
</webResources>
</configuration>
<goals>
<goal>war</goal>
</goals>
</execution>
<execution>
<id>package-dev</id>
<phase>package</phase>
<configuration>
<classifier>dev</classifier>
<webappDirectory>${project.build.directory}/${project.build.finalName}-dev</webappDirectory>
<webResources>
<resource>
<directory>src/env/dev</directory>
</resource>
</webResources>
</configuration>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<finalName>A-war</finalName>
</build>
<dependencies>
<dependency>
<groupId>gr.id</groupId>
<artifactId>A-war</artifactId>
<version>0.0.1-SNAPSHOT</version>
<classifier>prod</classifier>
<scope>provided</scope>
<type>war</type>
</dependency>
<dependency>
<groupId>gr.id</groupId>
<artifactId>A-war</artifactId>
<classifier>dev</classifier>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
<type>war</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>package-dev</id>
<phase>package</phase>
<configuration>
<classifier>dev</classifier>
<version>5</version>
<modules>
<webModule>
<groupId>gr.id</groupId>
<artifactId>A-war</artifactId>
<classifier>dev</classifier>
<contextRoot>/A-war</contextRoot>
<bundleFileName>/A-war.war</bundleFileName>
</webModule>
</modules>
</configuration>
<goals>
<goal>ear</goal>
</goals>
</execution>
<execution>
<id>package-prod</id>
<phase>package</phase>
<configuration>
<classifier>prod</classifier>
<version>5</version>
<modules>
<webModule>
<groupId>gr.id</groupId>
<artifactId>A-war</artifactId>
<classifier>prod</classifier>
<contextRoot>/A-war</contextRoot>
<bundleFileName>/A-war.war</bundleFileName>
</webModule>
</modules>
</configuration>
<goals>
<goal>ear</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>A-ear</finalName>
</build>
maven战争插件
包装产品
包裹
戳
${project.build.directory}/${project.build.finalName}-prod
src/env/prod
战争
软件包开发
包裹
发展
${project.build.directory}/${project.build.finalName}-dev
src/env/dev
战争
战争
这很好用-在目标文件夹A-war-prod和A-war-dev中创建2个*war*s
现在我想为每个战争构建耳朵工件
以下是A-ear模块中pom.xml的主要内容:
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>package-prod</id>
<phase>package</phase>
<configuration>
<classifier>prod</classifier>
<webappDirectory>${project.build.directory}/${project.build.finalName}-prod</webappDirectory>
<webResources>
<resource>
<directory>src/env/prod</directory>
</resource>
</webResources>
</configuration>
<goals>
<goal>war</goal>
</goals>
</execution>
<execution>
<id>package-dev</id>
<phase>package</phase>
<configuration>
<classifier>dev</classifier>
<webappDirectory>${project.build.directory}/${project.build.finalName}-dev</webappDirectory>
<webResources>
<resource>
<directory>src/env/dev</directory>
</resource>
</webResources>
</configuration>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<finalName>A-war</finalName>
</build>
<dependencies>
<dependency>
<groupId>gr.id</groupId>
<artifactId>A-war</artifactId>
<version>0.0.1-SNAPSHOT</version>
<classifier>prod</classifier>
<scope>provided</scope>
<type>war</type>
</dependency>
<dependency>
<groupId>gr.id</groupId>
<artifactId>A-war</artifactId>
<classifier>dev</classifier>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
<type>war</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>package-dev</id>
<phase>package</phase>
<configuration>
<classifier>dev</classifier>
<version>5</version>
<modules>
<webModule>
<groupId>gr.id</groupId>
<artifactId>A-war</artifactId>
<classifier>dev</classifier>
<contextRoot>/A-war</contextRoot>
<bundleFileName>/A-war.war</bundleFileName>
</webModule>
</modules>
</configuration>
<goals>
<goal>ear</goal>
</goals>
</execution>
<execution>
<id>package-prod</id>
<phase>package</phase>
<configuration>
<classifier>prod</classifier>
<version>5</version>
<modules>
<webModule>
<groupId>gr.id</groupId>
<artifactId>A-war</artifactId>
<classifier>prod</classifier>
<contextRoot>/A-war</contextRoot>
<bundleFileName>/A-war.war</bundleFileName>
</webModule>
</modules>
</configuration>
<goals>
<goal>ear</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>A-ear</finalName>
</build>
gr.id
战争
0.0.1-快照
戳
假如
战争
gr.id
战争
发展
0.0.1-快照
假如
战争
org.apache.maven.plugins
maven耳朵插件
2.8
软件包开发
包裹
发展
5.
gr.id
战争
发展
/战争
/战争
耳朵
包装产品
包裹
戳
5.
gr.id
战争
戳
/战争
/战争
耳朵
A耳
它还构建了2个ear**s:A-ear-dev.ear和A-ear-prod.ear。每个耳朵都包含一个A-war.war神器。除了一个小细节外,一切都会很好:这些**war文件是相同的。我的意思是A-ear-dev.ear包含A-war-dev.war(重命名为A-war.war),但是A-ear-prod.ear包含相同的A-war-dev.war,而不是它自己的A-war-prod.war。
此外,当我更改了执行顺序(将prod的创建移到高于dev的位置)之后,这些*ear*都包含了A-war-prod.war
正如我从maven输出中看到的,当开始构建ear**s时,它会将第一个war复制到第一个**ear的文件夹中,但第二个没有:
[INFO] --- maven-ear-plugin:2.8:ear (package-dev) @ A-ear
---
[INFO] Copying artifact [war:gr.id:A-war:dev:0.0.1-SNAPSHOT] to [/A-war.war]
[INFO] Including custom manifest ....
[INFO] Copy ear sources to ...
[INFO] Building jar: <location>\A-ear\target\A-ear-dev.ear
....
[INFO] --- maven-ear-plugin:2.8:ear (package-prod) @ A-ear ---
[INFO] Copy ear sources to ...
[INFO] Including custom manifest file ...
[INFO] Building jar: <location>\A-ear\target\A-ear-prod.ear
[INFO]——maven ear插件:2.8:ear(软件包开发)@A-ear
---
[INFO]正在将工件[war:gr.id:A-war:dev:0.0.1-SNAPSHOT]复制到[/A-war.war]
[信息]包括自定义清单。。。。
[信息]将ear源复制到。。。
[信息]构建jar:\A-ear\target\A-ear-dev.ear
....
[信息]---maven ear插件:2.8:ear(软件包产品)@A-ear---
[信息]将ear源复制到。。。
[信息]包括自定义清单文件。。。
[信息]构建jar:\A-ear\target\A-ear-prod.ear
因此,也许有人知道如何强制maven每次复制war文件吗?正如我发现的,当maven将war文件复制到临时目录时,它不会重写它-如果有同名的文件,那么它将不会被替换。所以在第一个工件复制之后,它总是复制指向执行模块的第一个工件。 没有复制所有其他工件。因此,这个伪影被放置在所有的result耳朵中 因此,该问题的解决方案是为每个执行标记指定工作目录,如:
<execution>
<id>package-prod</id>
<phase>package</phase>
<configuration>
<workDirectory>target/prod</workDirectory>
<classifier>prod</classifier>
<version>5</version>
<modules>
<webModule>
<groupId>gr.id</groupId>
<artifactId>A-war</artifactId>
<classifier>prod</classifier>
<contextRoot>/A-war</contextRoot>
<bundleFileName>/A-war.war</bundleFileName>
</webModule>
</modules>
</configuration>
<goals>
<goal>ear</goal>
</goals>
</execution>
包装产品
包裹
目标/产品
戳
5.
gr.id
战争
戳
/战争
/战争
耳朵