我想对maven项目中的不同文件夹进行测试,我需要更改maven的project.build.testSourceDirectory
属性。
我正在使用maven个人资料来解决这个问题。
我的个人资料如下:
<profiles>
<profile>
<id>sahi_UI_testing</id>
<activation>
<property>
<name>sahiTesting</name>
<value>true</value>
</property>
</activation>
<properties>
<maven.test.skip>false</maven.test.skip>
<project.build.testSourceDirectory>src/test/java/org/package1/package2/sahi</project.build.testSourceDirectory>
</properties>
</profile>
</profiles>
project.build.testSourceDirectory
未更改,仅保留为默认/home/username/workspace/projectName/core/src/test/java
(我已使用maven-antrun-plugin
对此进行了测试并给出了该路径)。
我在项目中有多个pom.xml,所以在路径中我有../core/ ..文件夹(这是项目的核心pom.xml)。
maven-antrun-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>******** Displaying value of property ********</echo>
<echo>${project.build.testSourceDirectory}</echo>
<echo>${maven.test.skip}</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
在mvn help:active-profiles -f core/pom.xml -Dtest=JavaClientTest -o -e test -DsahiTesting=true
中使用<maven.test.skip>true</maven.test.skip>
执行maven-antrun-plugin
这会让我:
[INFO]执行任务
[echo] * * 显示属性值 * *
[echo] / home / username / workspace / projectName / core / src / test / java
[echo]真实的
并且<maven.test.skip>false</maven.test.skip>
中的maven-antrun-plugin
给了我:
[INFO]执行任务
[echo] * * 显示属性值 * *
[echo] / home / username / workspace / projectName / core / src / test / java
[echo] false
因此,我们可以看到另一个变量发生了变化。
我知道个人资料已激活,因为我使用maven-help-plugin
来识别此信息
maven-help-plugin
给了我这样的结果:
以下配置文件处于活动状态:
我尝试过不使用maven的个人资料来更改project.build.testSourceDirectory
标记中的<build>
属性。
...
<build>
<testSourceDirectory>src/test/java/org/package/package2/sahi</testSourceDirectory>
...
</build>
属性已更改(但我需要为该属性分配多个值)。
我试过了maven-surefire-plugin
但也没有用。
问题是为什么使用个人资料时project.build.testSourceDirectory
没有改变?
答案 0 :(得分:5)
我找到了一个不太好的解决方案,但这是一个解决方案。对我而言,它正在运行,它会更改testSourceDirectory
变量。
在pom.xml
文件中,我已使用properties
的默认值初始化testSourceDirectory
标记中声明了自己的变量:
<project ...>
...
<properties>
<myTestSourceDirectory>${project.basedir}/src/test/java</myTestSourceDirectory>
...
</properties>
...
</project>
我的个人资料是:
<profiles>
<profile>
<id>sahi_UI_testing</id>
<activation>
<property>
<name>sahiTesting</name>
<value>true</value>
</property>
</activation>
<properties>
<maven.test.skip>false</maven.test.skip>
<myTestSourceDirectory>src/test/java/org/<package1>/<package2>/sahi</myTestSourceDirectory>
</properties>
</profile>
</profiles>
在build
代码的开头,我已将testSourceDirectory
设置为
<project ...>
<build>
<testSourceDirectory>${myTestSourceDirectory}</testSourceDirectory>
...
<build>
...
</project>
因此,当我们不使用配置文件时,我们有myTestSourceDirectory
变量的默认值,当我们使用配置文件时,变量将更改为请求的测试目录。该变量始终存在,并且在build
标记中,我们将testSourceDirectory
属性更改为所需的值。
答案 1 :(得分:-1)
您无法使用属性覆盖project
模型,Maven不允许这样做。你唯一的选择是在你想要使用的插件中指定testSourceDirectory(假设它可用)。