Java 使用maven为多个环境生成战争?
如何使用maven为多个环境生成战争Java 使用maven为多个环境生成战争?,java,maven,Java,Maven,如何使用maven为多个环境生成战争 我有大约8个环境。dev,dev_local,ci,ci_local,qa,qa_local,prod,prod_local 我不想为*本地环境生成war文件 我有所有环境通用的配置文件。我希望避免为各种环境维护这些文件的重复副本 公共文件可能只有很少的属性,需要针对各种环境进行自定义 战争中的清单文件应具有特定于环境的信息 资源文件应该放在WEB-INF/classes目录中 环境maven插件提供上述所有功能 环境maven插件是多环境maven插件的
- 我有大约8个环境。dev,dev_local,ci,ci_local,qa,qa_local,prod,prod_local李>
- 我不想为*本地环境生成war文件
- 我有所有环境通用的配置文件。我希望避免为各种环境维护这些文件的重复副本
- 公共文件可能只有很少的属性,需要针对各种环境进行自定义
- 战争中的清单文件应具有特定于环境的信息
- 资源文件应该放在WEB-INF/classes目录中李>
环境maven插件是多环境maven插件的一个分支。multienv maven插件的核心理念是,src/main/environments目录中的每个目录都是一个环境,每个目录都会生成war。这种哲学太狭隘了。它以牺牲功能为代价提供了简单性。Environments maven插件继续使用src/main/Environments中的目录作为各种环境的名称。但它进一步扩展了插件。下面列出了其中的一些细节 环境排除。 大多数项目都有资源文件,用于各种环境和在开发人员的机器上运行代码,但指向各种环境。例如:dev、dev_local、ci、ci_local、qa、qa_local等-这些qa资源文件用于在qa环境中运行应用程序。qa_本地资源文件用于在指向qa环境的开发人员机器上运行应用程序。运行发布版本时,不应生成dev_local、ci_local和qa_local的war文件。否则,它会减慢构建速度并使构建页面杂乱无章,可能会给执行实际部署的一方造成混乱 environments maven插件允许排除不需要生成war文件的环境。这可以使用插件配置中的excludeEnvironments标记来完成 示例配置
<plugin>
<groupId>net.sf.environments-maven-plugin</groupId>
<artifactId>environments-maven-plugin</artifactId>
<version>1.1.0-SNAPSHOT</version>
<configuration>
<excludeEnvironments>dev01, qa01 ,qa02,</excludeEnvironments>
<parallel>true</parallel>
</configuration>
<executions>
<execution>
<goals>
<goal>configuration</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.sf.environments-maven-plugin</groupId>
<artifactId>environments-maven-plugin</artifactId>
<version>1.3.0-SNAPSHOT</version>
<configuration>
<commonDir>common</commonDir>
<filters>
<filter>ec.properties</filter>
</filters>
</configuration>
<executions>
<execution>
<goals>
<goal>environment</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.sf.environments-maven-plugin</groupId>
<artifactId>environments-maven-plugin</artifactId>
<version>1.1.0-SNAPSHOT</version>
<configuration>
<targetPath>WEB-INF/classes</targetPath>
</configuration>
<executions>
<execution>
<goals>
<goal>environment</goal>
</goals>
</execution>
</executions>
</plugin>
下图说明了文件/目录命名/结构
注意:要使筛选工作正常,应同时声明commonDir和filters标记
用于将资源文件放置在War文件内的特定目录中的工具
资源文件通常属于war文件中的WEB-INF/classes目录。要在multimaven maven插件中实现这一点,必须在src/main/environments中的每个环境中创建WEB-INF/classes目录,然后将资源文件放在其中。如下图所示,这是多余和丑陋的
- src
- 主要
- 环境
- 发展
- WEB-INF
- 班级
- 档案
- 班级
- WEB-INF
- 本地开发人员
- WEB-INF
- 班级
- 档案
- 班级
- WEB-INF
- 词
- WEB-INF
- 班级
- 档案
- 班级
- WEB-INF
- ci_local
- WEB-INF
- 班级
- 档案
- 班级
- WEB-INF
- 发展
- 环境
- 主要
<plugin>
<groupId>net.sf.environments-maven-plugin</groupId>
<artifactId>environments-maven-plugin</artifactId>
<version>1.1.0-SNAPSHOT</version>
<configuration>
<excludeEnvironments>dev01, qa01</excludeEnvironments>
<parallel>true</parallel>
<archives>
<environmentArchiveConfiguration>
<environment>dev02</environment>
<archive>
<manifestEntries>
<mode>development</mode>
<key>value</key>
</manifestEntries>
</archive>
</environmentArchiveConfiguration>
<environmentArchiveConfiguration>
<environment>prod01, prod02</environment>
<archive>
<manifestEntries>
<mode>development1</mode>
<key>value1</key>
</manifestEntries>
</archive>
</environmentArchiveConfiguration>
</archives>
</configuration>
<executions>
<execution>
<goals>
<goal>configuration</goal>
</goals>
</execution>
</executions>
</plugin>
- app_dev.jar
- WEB-INF
- 班级
- 档案
- 班级
- WEB-INF
- app_dev_local.jar
- WEB-INF
- 班级
- 档案
- 班级
- WEB-INF
- app_ci.jar
- WEB-INF
- 班级
- 档案
- 班级
- WEB-INF
- app_ci_local.jar
- WEB-INF
- 班级
- 档案
- 班级
- WEB-INF
- src
- 主要
- 环境
- 发展
- 档案
- 本地开发人员
- 档案
- 词
- 档案
- ci_local
- 档案
- 发展
<plugin>
<groupId>net.sf.environments-maven-plugin</groupId>
<artifactId>environments-maven-plugin</artifactId>
<version>1.1.0-SNAPSHOT</version>
<configuration>
<excludeEnvironments>dev01, qa01 ,qa02,</excludeEnvironments>
<parallel>true</parallel>
</configuration>
<executions>
<execution>
<goals>
<goal>configuration</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.sf.environments-maven-plugin</groupId>
<artifactId>environments-maven-plugin</artifactId>
<version>1.3.0-SNAPSHOT</version>
<configuration>
<commonDir>common</commonDir>
<filters>
<filter>ec.properties</filter>
</filters>
</configuration>
<executions>
<execution>
<goals>
<goal>environment</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.sf.environments-maven-plugin</groupId>
<artifactId>environments-maven-plugin</artifactId>
<version>1.1.0-SNAPSHOT</version>
<configuration>
<targetPath>WEB-INF/classes</targetPath>
</configuration>
<executions>
<execution>
<goals>
<goal>environment</goal>
</goals>
</execution>
</executions>
</plugin>
net.sf.environments-maven-plugin
源代码:
概览页面:
编辑
这就是关于配置的说法
应用程序有时将配置存储为代码中的常量。这违反了12个因素,这要求将配置与代码严格分离。不同部署的配置差异很大,而代码则不同。
environments maven插件支持从代码中分离配置
配置管理的另一个方面是分组。有时,应用程序会批量配置到以特定部署命名的组(通常称为“环境”),例如Rails中的开发、测试和生产环境。这种方法不能很好地扩展:随着应用程序部署的增加,需要新的环境名称,如staging或qa。随着项目的进一步发展,开发人员可能会添加他们自己的特殊环境,如joes staging,从而导致配置的组合爆炸,这使得管理应用程序的部署变得非常脆弱。
请注意,它表明为不同的环境维护单独的属性文件是脆弱的,但不建议任何替代方案。虽然知识更渊博的人可以就这种想法的优点和缺点进行争论,但在现实世界中,属性文件被分组到不同的环境中。在这种情况下,需要将这些组正确地打包到war文件中,或者将这些组交付到各自的环境中