若是在本地开发环境中安装了多个JDK版本的话,须要在idea中自由切换,就须要利用Maven进行配置,配置后就能够很是方便的进行版本切换。配置步骤以下:java
在Maven的本地配置中,添加如下配置,配置JAVA_HOME和JAVA_VERSION两个属性。git
<profiles> <profile> <id>java6-compiler</id> <properties> <JAVA_HOME>C:\SoftCommon\Java\jdk1.6.0_45</JAVA_HOME> <JAVA_VERSION>1.6</JAVA_VERSION> </properties> </profile> <profile> <id>java7-compiler</id> <properties> <JAVA_HOME>C:\SoftCommon\Java\jdk1.7.0_67</JAVA_HOME> <JAVA_VERSION>1.7</JAVA_VERSION> </properties> </profile> <profile> <id>java8-compiler</id> <properties> <JAVA_HOME>C:\SoftCommon\Java\jdk1.8.0_202</JAVA_HOME> <JAVA_VERSION>1.8</JAVA_VERSION> </properties> <!-- activeByDefault=true表明若是不指定某个固定id的profile,那么就使用这个环境 --> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>java9-compiler</id> <properties> <JAVA_HOME>C:\SoftCommon\Java\jdk-9</JAVA_HOME> <JAVA_VERSION>1.9</JAVA_VERSION> </properties> </profile> <profile> <id>java11-compiler</id> <properties> <JAVA_HOME>C:\SoftCommon\Java\jdk-11.0.2</JAVA_HOME> <JAVA_VERSION>11</JAVA_VERSION> </properties> </profile> </profiles>
在相应的项目工程中配置pom.xml中配置以下,主要是添加一个build标签,添加maven-compiler-plugin编译插件。github
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.home>${JAVA_HOME}</java.home> <java.version>${JAVA_VERSION}</java.version> <maven.compiler.source>${JAVA_VERSION}</maven.compiler.source> <maven.compiler.target>${JAVA_VERSION}</maven.compiler.target> </properties> <build> <!--pluginmanagement标签通常用在父pom中,子元素能够包含plugins插件--> <pluginManagement> <plugins> <!-- 一个好习惯,就是在此配置JDK的版本,这样就能够方便代码迁移 By Landy 2019.01.04--> <!--通常而言,target与source是保持一致的。可是,有时候为了让程序能在其余版本的jdk中运行(对于低版本目标jdk,源代码中须要没有使用低版本jdk中不支持的语法),会存在target不一样于source的状况 。--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>${maven.compiler.source}</source> <!-- 源代码使用的开发版本 --> <target>${maven.compiler.target}</target> <!-- 须要生成的目标class文件的编译版本 --> <!-- 这下面的是可选项 --> <meminitial>128m</meminitial> <maxmem>512m</maxmem> <fork>true</fork> <!-- fork is enable,用于明确表示编译版本配置的可用 --> <compilerVersion>${java.version}</compilerVersion> <!-- 这个选项用来传递编译器自身不包含可是却支持的参数选项 --> <!--<compilerArgument>-verbose -bootclasspath ${java.home}\lib\rt.jar</compilerArgument>--> <executable>${java.home}/bin/javac</executable> </configuration> </plugin> </plugins> </pluginManagement> </build>
注意:pluginmanagement主要是用于父工程(module),而后在相应的子工程(module)中添加以下配置便可加入maven-compiler-plugin插件,这样就可让子工程决定是否加载相应的Maven插件。apache
<build> <!--而后,在子pom文件中就能够这样使用,省去了版本、配置等信息,只需指定groupId和artifactId便可。--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> </plugin> </plugins> </build>
以上配置详情能够参看本例项目配置。配置完成刷新一下Maven插件(reimport),便可展现上面所配置的profile列表。以下所示:maven
打开idea中的project structure,配置相应的project sdk和project language level,配置以下(本案例采用JDK11),ide
在Modules中有可能会没能自动刷新相应的sdk language level配置,这时候就须要手动设置。测试
注意:通过本人现场测试,发现idea 2018.03版本的状况,他只能自动刷新的language level是JDK1.8+的版本。操做方法:点击Maven插件中的reimport,以下所示,ui
在Idea中须要配置一下Maven settings.xml文件和Maven本地仓库的位置,若是有本地安装的Maven也能够进行配置(没有则使用idea默认自带的Maven)。file --> settings --> maven 以下所示:idea
为了每次切换了Project JDK后,不须要再次进行设置能够选择Project JDK选项。以下所示,spa
这时候,通常状况下,通过上面步骤,基本上就就能够进行相应的maven编译打包的操做了,可是有时候会遇到以下的问题,
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project xxxx Fatal error compiling: 无效的标记: -parameters -> [Help 1]
这个错误是因为你项目所需jdk版本和你当前使用的jdk版本不一致致使的,由于我项目的pom.xml中定义了java版本为11,可是我实际idea中run这个项目倒是1.8.
要是你在intellij idea里面的maven窗口点击的打包编译的话,就在intellij idea设置项目jdk版本,直接Ctrl+Alt+s进入设置界面。
经过以上步骤就能够利用maven进行编译打包的操做了。
若是使用idea,则能够直接使用maven插件进行打包操做。以下图所示,
若是使用Maven命令,以下所示,
mvn -s D:\mvn_repository\settings.xml clean package -P java11-compiler
java11-compiler即为上面配置的jdk版本的profile id,而且须要制定相应的settings文件便可。
笔者Github连接: https://github.com/landy8530