当前位置: 首页 > 知识库问答 >
问题:

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

苗承
2023-03-14

我需要更改maven-compiler-plugin用来编译测试的类路径值,但我找不到任何方法来做这件事...

我读过:

  • Maven将本地类目录添加到模块的类路径
  • Maven:将文件夹或jar文件添加到当前类路径

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

    null
<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>

这是我的客户端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>

正如您所看到的,我禁用了执行“default-compile”,因为它直接在target/classes文件夹中编译源代码的3倍,在我的例子中这是非常脏的。我只想要target/classes/JDK7中的JDK7类和target/classes/JDK8中的JDK8类。

问题是maven-compiler-plugin对类路径使用的“default-testcompile”执行是:

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

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

注意:我知道如果我不禁用“default-compile”,它会起作用,因为类将在“target/classes”中,但我不想编译源代码的3倍...

共有1个答案

徐洋
2023-03-14

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

<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;当您想用jdk8构建时,则调用-p jdk8。例如:

mvn clean install -P jdk7
 类似资料:
  • 我是测试自动化工程师,我已经为自动化脚本配置了Jenkins和maven项目,几天前我的所有脚本在Jenkins和本地运行良好,但现在当我通过异常运行build in Jenkins和本地系统时,在本地,当我尝试更新我的maven项目并通过命令“maven test”运行脚本时,它工作正常,当我尝试运行命令“maven clean”,然后以“maven test”的形式运行命令时,所有脚本都会运行

  • 当我运行intellij idea maven安装时,它遇到了如下问题 无法执行目标组织。阿帕奇。专家插件:maven编译器插件:3.8.1:testCompile 如何解决?

  • 我知道有很多问题都有类似的错误。在此之前,我将不胜感激,因为考虑到它只发生在Java9中。 我确实安装了java 9 为了简化示例,如果我下载一个非常简单的示例https://examples.javacodegeeks.com/core-java/java-9-httpclient-example/我尝试/ mvn清洁安装包-e 波姆。xml 我有点困惑是什么导致了这个问题。除此之外,我还面临着

  • 当我在vscode的集成终端中运行java程序时,完整的java路径显示为一大框文本。有没有什么办法可以把它带走? /library/java/javavirtualmachines/jdk-13.0.1.jdk/contents/home/bin/java--enable-preview-dfile.encoding=utf-8-cp“/users/myusername/library/appl

  • 我即将使用外部库,但它们不起作用,当我查看它们时,我发现了这个 所以我想知道如何更新我的编译器Abi版本,而且,我应该担心,其他一些外部库可能与此冲突吗?可以管理不同的编译器ABI版本?

  • 问题内容: 我只是好奇地知道这一点,当我不进行“清理”就安装mvn时,maven仅编译了修改后的java文件。Maven如何识别Java文件是否被修改?我相信它没有使用文件的最后修改属性。 我相信的原因:我有一个模块,在合并了svn的更改后,我进行了mvn install,但它没有编译修改后的文件,当我查看更改时,我发现其中的’long’被修改为’Long’吸气剂和二传手。 所以我只想知道Mave