一尘不染

为dev / qa / prod配置Java EE 6

java

我有一个用Maven生成的Java EE 6应用程序,在NetBeans 7中编码,并部署在GlassFish
3.1.2上。当我快要完成时,我发现自己正在部署演示版本。

问题是,我没有针对不同环境(如dev,QA,demo,prod等)构建的简单方法。对于某些东西,我一直在使用Java类,该类具有大量返回的静态getter值基于环境常数的值。但这对我有条件设置没有帮助

  • javax.faces.PROJECT_STAGE(web.xml)
  • 数据库凭证(glassfish-resources.xml)
  • 邮件服务器(glassfish-resources.xml)
  • JPA日志记录级别(persistence.xml)

可能还有许多其他我现在无法考虑的事情,这些事情分散在XML文件中。

有没有什么方法可以定义这些配置文件的多个版本,并仅在构建时设置标志以选择环境,而在未指定环境的情况下默认为dev?在这种情况下,有什么办法可以让Maven为我工作?


阅读 224

收藏
2020-12-03

共1个答案

一尘不染

您可以使用maven来实现。特别是使用资源过滤

首先,您可以定义配置文件列表:

  <profiles>
    <profile>
      <id>dev</id>
      <properties>
        <env>development</env>
      </properties>
      <activation>
        <activeByDefault>true</activeByDefault> <!-- use dev profile by default -->
      </activation>
    </profile>
    <profile>
      <id>prod</id>
      <properties>
        <env>production</env>
      </properties>
    </profile>
  </profiles>

然后,您需要过滤的资源:

  <build>
    <outputDirectory>${basedir}/src/main/webapp/WEB-INF/classes</outputDirectory>
    <filters>
      <filter>src/main/filters/filter-${env}.properties</filter> <!-- ${env} default to "development" -->
    </filters>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>

然后基于src/main/filters目录中的配置文件的自定义属性:

filter-development.properties

# profile for developer
db.driver=org.hsqldb.jdbcDriver
db.url=jdbc:hsqldb:mem:web

filter-production.properties

# profile for production
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/web?createDatabaseIfNotExist=true

要使用生产配置文件,您可以使用mvn clean package -Pprodcommand 打包war 。

在这里,您可以看到在maven中使用配置文件的示例项目。

2020-12-03