Handle different language and target levels for so

2019-02-12 08:15发布

问题:

I'm interested if someone has clue how to handle this pom in projects properties of IDEA:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
       <source>1.3</source>
       <target>1.3</target>
       <testSource>1.5</testSource>
       <testTarget>1.5</testTarget>
   </configuration>
   <version>3.0</version>
</plugin> 

Should I set project level 1.3 and module level 1.5 or wise verse around?

As well anytime when IDEA reloads maven project it sets language levels as it thinks from maven to 1.3 and after always complaints about test classes.

But this will go as bug report to JetBrains.

回答1:

Supporting test source/target levels is tracked by this request. Language level changed message is also a known issue.



回答2:

As already mentioned different language levels for main and test sources are not yet supported by Idea.

There's a workaround to force Idea to use the language level defined in testSource when importing Maven project. You can create a separate Maven profile only for Idea with different compiler plugin settings:

<profiles>

    <profile>
        <id>default</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                        <testSource>1.8</testSource>
                        <testTarget>1.8</testTarget>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

    <profile>
        <id>ide</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <property>
                <name>idea.maven.embedder.version</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <testSource>1.8</testSource>
                        <testTarget>1.8</testTarget>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

</profile>