Maven编译器插件:如何更改testCompile的类路径值?

时间:2016-06-16 14:37:37

标签: maven classpath maven-compiler-plugin

我需要更改maven-compiler-plugin使用的类路径值来编译测试,我无法找到任何方法...

我读过:

但这些解决方案对我不利。

更确切地说,我们正在构建客户端jar以使用此API,我们需要构建此客户端两次:

  • 一个有源&新客户端的目标是1.8
  • 一个有源&对于仍在使用JDK7的客户端,目标为1.7

这是maven-compiler-plugin在我父POM的pluginManagement中的配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5.1</version>
    <configuration>
        <includes>
            <include>**/*.java</include>
        </includes>
        <target>1.8</target>
        <source>1.8</source>
        <fork>true</fork>
        <encoding>UTF-8</encoding>
    </configuration>
    <executions>
        <execution>
            <id>jdk7</id>
            <phase>none</phase>
            <goals>
                <goal>compile</goal>
            </goals>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <fork>true</fork>
                <outputDirectory>${project.build.directory}/classes/jdk7/</outputDirectory>
            </configuration>
        </execution>
        <execution>
            <id>jdk8</id>
            <phase>none</phase>
            <goals>
                <goal>compile</goal>
            </goals>
            <configuration>
                <fork>true</fork>
                <outputDirectory>${project.build.directory}/classes/jdk8/</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

阶段设置为&#34;无&#34;默认情况下禁用这些执行,它们仅针对客户端执行。

这是我的客户端POM的配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <executions>
        <execution>
            <id>jdk7</id>
            <phase>compile</phase>
        </execution>
        <execution>
            <id>jdk8</id>
            <phase>compile</phase>
        </execution>
        <execution>
            <id>default-compile</id>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

正如您所看到的,我已经禁用了执行&#34; default-compile&#34;,因为它直接在目标/类文件夹中编译了第3次源代码并且它已经#39在我的情况下很脏。 我只想在target / classes / jdk8中的target / classes / jdk7和JDK8类中使用JDK7类。

问题在于&#34; default-testCompile&#34;执行maven-compiler-plugin用于类路径的是:

  • 目标/测试类
  • 目标/类
  • 所有依赖项jars

编译失败,因为maven-compiler-plugin没有在target / classes / jdk8文件夹中查找类文件。

我试图添加compilerArguments&amp; compilerArgs配置,但它没有工作......

我如何添加&#34; target / classes / jdk8&#34;或更改&#34;目标/类&#34; to&#34; target / classes / jdk8&#34;到default-testCompile使用的类路径?

注意:我知道如果我不禁用&#34; default-compile&#34;,它将起作用,因为这些类将在&#34; target / classes&#34;但我不想编译3次来源......

2 个答案:

答案 0 :(得分:0)

您可以使用配置文件来使用不同的配置。您必须定义两个配置文件,一个使用jdk8配置,另一个使用jdk 7配置。例如:

<profiles>
    <profile>
        <id>jdk7</id>
        <activation>
            <property>
                <name>jdk7</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>jdk8</id>
        <activation>
            <property>
                <name>jdk8</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

因此,当您想使用jdk7进行构建时,只需使用-P jdk7进行调用,以及何时使用-P jdk8进行jdk8调用。例如:

mvn clean install -P jdk7

答案 1 :(得分:0)

我发现解决问题的唯一方法是修改maven-compiler-plugin。

我已经添加了属性&#34; additionalClasspathElements&#34;在TestCompilerMojo中。

我很快会提出拉动请求。