我有一个Maven项目,它针对数据库运行一些测试。我可以使用mvn clean verify
运行这些测试,但我想指定一些数据库属性,例如。数据库名称,端口名称等...在我的pom.xml文件中,我可以在Java中使用它来创建数据库连接。
我已将此添加到我的POM中,
<properties>
<server>localhost</server>
<database>mydatabase</database>
<port>1433</port>
</properties>
我可以从我的Java代码访问这些属性,还是需要创建Maven插件并将这些属性作为参数传递给我的插件并从我的自定义插件中调用clean verify
?
答案 0 :(得分:5)
启用资源过滤(例如,用于测试资源):
<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
</build>
在src/test/resources
下创建db.properties:
server=${server}
port=${port}
在测试中,请阅读db.properties
:
InputStream inputStream = getClass().getResourceAsStream("/db.properties")
Properties props = new Properties();
props.load(inputStream);
Maven: The Complete Reference概述了它的工作原理:
答案 1 :(得分:0)
当您运行测试时,您可以在运行测试的命令行上使用相当于-D的Surefire插件将Maven属性传递到Java应用程序中。\
这说明了如何做到这一点:
http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html
答案 2 :(得分:0)
不,你的项目不能通过System.getProperty()
使用这些属性(maven属性)。
因为maven在构建时工作,并且您的代码在运行时工作。但是你可以让maven在构建期间设置一些属性(例如属性文件),然后你的类可以获得这些值。
通常在jvm启动时设置系统属性。如果运行项目的VM是从maven启动的,通过某个插件(例如mvn jetty:run
)启动,那么您就有机会获得maven中定义的属性。但是,如果您的项目在与maven无关的VM上运行,则无法获得这些属性。