3

我有一个针对数据库运行一些测试的 Maven 项目。我可以运行这些测试,mvn clean verify但我想指定一些数据库属性,例如。数据库名称,端口名称等...在我的 pom.xml 文件中,我可以在 Java 中使用它来创建数据库连接。

我已将此添加到我的 POM 中,

  <properties>
    <server>localhost</server>
    <database>mydatabase</database>
    <port>1433</port>
  </properties>

我可以从我的 Java 代码中访问这些属性,还是需要创建一个 Maven 插件并将这些属性作为参数传递给我的插件并clean verify从我的自定义插件中调用?

4

3 回答 3

5

启用资源过滤(例如,用于测试资源):

<build>
  <testResources>
    <testResource>
      <directory>src/test/resources</directory>
      <filtering>true</filtering>
    </testResource>
  </testResources>
</build>

在下面创建一个 db.properties src/test/resources

server=${server}
port=${port}

在您的测试中,请阅读db.properties

InputStream inputStream = getClass().getResourceAsStream("/db.properties")
Properties props = new Properties();
props.load(inputStream);

Maven: The Complete Reference概述了它的工作原理:

于 2013-01-11T17:39:00.050 回答
0

当您运行测试时,您可以在运行测试的命令行上使用与 -D 等效的 Surefire 插件将 Maven 属性传递到 java 应用程序。\

这显示了如何做到这一点:

http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html

于 2013-01-11T17:11:04.467 回答
0

不,您不能从您的项目中使用这些属性(Maven 属性)System.getProperty()

因为 maven 在构建时工作,而您的代码在运行时工作。但是您可以让 maven 在构建过程中设置一些属性(例如属性文件),然后您的类可以获得这些值。

通常系统属性是在 jvm 启动时设置的。如果您的项目正在运行的虚拟机是从 maven 启动的,例如通过某些插件,mvn jetty:run那么您就有机会获得在 maven 中定义的属性。但是,如果您的项目在与 maven 无关的 VM 上运行,则您无法获取这些属性。

于 2013-01-11T17:17:33.423 回答