在IntelliJ IDEA中的Maven项目中,源代码和测试源代码使用不同版本的JDK

4

我在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中手动更改了项目结构的设置,但是在编译项目时出现了以下错误。
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

据我所知,每个模块只支持一个Java版本。为什么你不想在开发时使用1.7呢?假设Intellij使用1.7,而Maven仍然使用1.4进行编译。我认为这样会起作用。另一种选择是将测试项目放到另一个模块中。 - bhdrkn
@bhdrkn 我尝试在IDEA中更改设置,但是我得到了一个看起来很奇怪的错误,我已经添加到问题中。 - jmruc
缺陷:https://youtrack.jetbrains.com/issue/IDEA-85478 - AlikElzin-kilaka
1个回答

2
很遗憾,目前Idea还不支持源代码和测试代码的不同语言级别。2012年,JetBrains在其问题跟踪器中开放了适当的错误报告:https://youtrack.jetbrains.com/issue/IDEA-85478
作为一种解决方法,每次我将我的Maven项目导入Idea(即在我对pom.xml进行任何更改之后),我都会执行以下操作:
  1. 转到“项目结构”(Ctrl+Alt+Shift+S),打开您的模块并将语言级别设置为1.7
  2. 打开“Idea设置”(Ctrl+Alt+S),搜索“Java编译器”,并更改您的项目的目标字节码版本为1.7
缺点是Idea不知道您的非测试源应该编译为1.4,并且只提供Java 1.5+中可用的更改。
另一种解决方案是将测试提取到单独的Maven模块中(它将作为单独的Idea模块导入),并为其设置不同的语言级别,即仅针对包含测试的模块指定testSource级别为1.7。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接