如何通过 Maven 插件设置 Java/Scala 测试的系统属性?
How to set Java/Scala tests' system properties through maven plugin?
我想 运行 我的测试有 2 个不同的配置文件,每个配置文件设置一个 Java 属性 导致我的 scala 测试代码以不同的方式执行。
我尝试配置 maven-surefire 和 maven-scalatest 插件:
<plugin>
<groupId>org.scalatest</groupId>
<artifactId>scalatest-maven-plugin</artifactId>
<version>1.0</version>
<configuration>
<systemProperties>
<spark.master>local</spark.master>
</systemProperties>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<systemPropertyVariables>
<spark.master>local</spark.master>
</systemPropertyVariables>
</configuration>
</plugin>
但似乎没有一个有效,当执行 System.getProperty("spark.master") 结果仍然为空。我应该怎么做才能启用此设置?
//---------------------------------------- ----
回复第一个答案:
我已将 surefire 配置更改为以下内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<executions>
<execution>
<id>test</id>
<goals>
<goal>test</goal>
</goals>
<systemPropertyVariables>
<spark.master>${spark.master}</spark.master>
</systemPropertyVariables>
</execution>
</executions>
<configuration>
<forkCount>1</forkCount>
</configuration>
</plugin>
但显然是在错误的地方。 Maven 给了我这个错误:
[ERROR] Malformed POM /home/peng/git/datapassport/pom.xml: Unrecognised tag: 'systemPropertyVariables' (position: START_TAG seen ...</goals>\n <systemPropertyVariables>... @170:50) @ /home/peng/git/datapassport/pom.xml, line 170, column 50 -> [Help 2]
(a) 如果您使用 JUnit - 将其版本升级到 4.7 或更高版本并指定显式提供程序:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.18.1</version>
</dependency>
</dependencies>
(b) 在 surefire 插件配置中指定
<forkCount>1</forkCount>
(c) 使用插件的执行 maven 机制运行 两个不同的配置文件
<executions>
<execution>
<id>tests-1</id>
<goals><goal>test</goal></goals>
<configuration>
<systemProperyVariables ... />
</configuration>
</execution>
<execution>
<id>tests-2</id>
<goals><goal>test</goal></goals>
<configuration>
<systemProperyVariables ... />
</configuration>
</execution>
我想 运行 我的测试有 2 个不同的配置文件,每个配置文件设置一个 Java 属性 导致我的 scala 测试代码以不同的方式执行。
我尝试配置 maven-surefire 和 maven-scalatest 插件:
<plugin>
<groupId>org.scalatest</groupId>
<artifactId>scalatest-maven-plugin</artifactId>
<version>1.0</version>
<configuration>
<systemProperties>
<spark.master>local</spark.master>
</systemProperties>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<systemPropertyVariables>
<spark.master>local</spark.master>
</systemPropertyVariables>
</configuration>
</plugin>
但似乎没有一个有效,当执行 System.getProperty("spark.master") 结果仍然为空。我应该怎么做才能启用此设置?
//---------------------------------------- ----
回复第一个答案:
我已将 surefire 配置更改为以下内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<executions>
<execution>
<id>test</id>
<goals>
<goal>test</goal>
</goals>
<systemPropertyVariables>
<spark.master>${spark.master}</spark.master>
</systemPropertyVariables>
</execution>
</executions>
<configuration>
<forkCount>1</forkCount>
</configuration>
</plugin>
但显然是在错误的地方。 Maven 给了我这个错误:
[ERROR] Malformed POM /home/peng/git/datapassport/pom.xml: Unrecognised tag: 'systemPropertyVariables' (position: START_TAG seen ...</goals>\n <systemPropertyVariables>... @170:50) @ /home/peng/git/datapassport/pom.xml, line 170, column 50 -> [Help 2]
(a) 如果您使用 JUnit - 将其版本升级到 4.7 或更高版本并指定显式提供程序:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.18.1</version>
</dependency>
</dependencies>
(b) 在 surefire 插件配置中指定
<forkCount>1</forkCount>
(c) 使用插件的执行 maven 机制运行 两个不同的配置文件
<executions>
<execution>
<id>tests-1</id>
<goals><goal>test</goal></goals>
<configuration>
<systemProperyVariables ... />
</configuration>
</execution>
<execution>
<id>tests-2</id>
<goals><goal>test</goal></goals>
<configuration>
<systemProperyVariables ... />
</configuration>
</execution>