Maven project.build.testSourceDirectory属性不适用于配置文件

时间:2013-10-02 14:32:11

标签: maven pom.xml

我想对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给了我这样的结果:
以下配置文件处于活动状态:

  • sahi_UI_testing(来源:pom)

我尝试过不使用maven的个人资料来更改project.build.testSourceDirectory标记中的<build>属性。

...
<build>
    <testSourceDirectory>src/test/java/org/package/package2/sahi</testSourceDirectory>
    ...
</build>

属性已更改(但我需要为该属性分配多个值)。 我试过了maven-surefire-plugin但也没有用。

问题是为什么使用个人资料时project.build.testSourceDirectory没有改变?

2 个答案:

答案 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(假设它可用)。