java – IntelliJ IDEA中maven项目的不同源和testSource JDK [复制]

参见英文答案 >
Handle different language and target levels for sources and tests with IntelliJ IDEA                                    2个

我有一个在IDEA进口的maven项目.有一个子模块使用不同版本的java作为常规源和测试源 – 它使用java 1.4作为常规源,使用java 7作为测试源,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.4</source>
        <target>1.4</target>
        <testSource>1.7</testSource>
        <testTarget>1.7</testTarget>
        <useIncrementalCompilation>false</useIncrementalCompilation>
    </configuration>
</plugin>

使用maven时项目编译良好,但无法在IDEA中编译.当我打开项目结构时 – >模块设置,我看到导入的模块语言级别为1.4.因此,测试类的编译失败,因为它们使用1.4中没有的功能.

作为解决方法,我手动更改pom.xml中的java版本.有没有办法在不必修改maven配置的情况下执行此操作?

编辑:正如评论中所建议的那样,我在IDEA中的Project结构中手动更改了设置,但在编译项目时出现以下错误:

Information:3/20/2015 5:29 PM - Compilation completed with 1 error and 0 warnings in 5 sec
Error:java: javacTask: source release 1.7 requires target release 1.7

最佳答案 遗憾的是,Idea还不支持源和测试的不同语言级别.早在2012年JetBrains问题跟踪器中就已经开启了适当的错误:
https://youtrack.jetbrains.com/issue/IDEA-85478

作为一种解决方法,我每次导入时都会执行以下操作(即在我对pom.xml进行任何更改之后)将myven项目导入Idea:

>转到项目结构(Ctrl Alt Shift S),打开模块并将语言级别设置为1.7
>打开Idea设置(Ctrl Alt S),搜索Java编译器,将项目的目标字节码版本更改为1.7

缺点是Idea不会知道您的非测试源应该编译为1.4并且将提供您仅在Java 1.5中进行更改

另一个解决方案是将测试提取到一个单独的Maven模块中(它将作为一个单独的Idea模块导入Idea)并为其设置不同的语言级别,即仅将testSource lvel指定为包含测试的模块的1.7

点赞