我有一个用Maven生成的Java EE 6应用程序,在NetBeans 7中编码,并部署在GlassFish 3.1.2上。当我快要完成时,我发现自己正在部署演示版本。
问题在于,我没有针对不同环境(如dev,QA,demo,prod等)构建的简单方法。对于某些东西,我一直在使用Java类,该类具有大量返回的静态getter值基于环境常数的值。但这对我有条件设置没有帮助
可能还有许多其他我现在无法考虑的事情,这些事情分散在XML文件中。
有没有什么方法可以定义这些配置文件的多个版本,并仅在构建时设置标志以选择环境,而在未指定环境的情况下默认为dev?在这种情况下,有什么办法可以让Maven为我工作?
参考方案
您可以使用maven来实现。特别是使用resource filtering。
首先,您可以定义配置文件列表:
<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 -Pprod
命令打包war。
Here您可以看到在maven中使用配置文件的示例项目。
Java SE和Java EE之间的细线 - java我是写Java控制器(mvc),用junit进行测试,写jdbc,使用maven的人...基本上,我怎么知道什么时候是Java EE,什么时候不是?我不写servlet或jsps(它们是Java EE的一部分),但是我确实使用API,所以...我是什么? Java EE程序员? Java SE程序员?如果您是Spring / Hibernate开发人员,…
与哪些运算符>>兼容 - java我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…
Java编程要求 - java我是C#程序员。我想学习Java来实现Windows应用程序。但是我不知道什么IDE和什么工具可以帮助我。请帮助我选择最佳的平台和IDE等工具。编辑:谢谢您的帮助。什么是学习Java的最佳电子书和UserGuid。 参考方案 首先,下载Java jdk。http://www.java.com/en/download/index.jsp稍后,安装IDE。我建议…
JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…
Java 8流:处理空值 - java以下代码为属性Salary为null抛出NPE。class Person具有以下属性:字符串:name,整数:age,整数:薪金salary在此处可以为null。我想创建一份工资清单。persons.stream().mapToDouble(Person::getSalary).boxed().collect(Collectors.toList())在这里,…