由于特定情况,本机下有多个jdk,而JAVA_HOME又只有一个。
本人习惯在命令行下一个命令编译打包程序,如何解决这个问题? 研究了不少时间,得到了两个解决方案:
1.使用bat -- 非常烂,不是很建议,如果您是系统管理员则另当别论。因为我们都知道编写纯bat实在不是很愉快,bat的语法是反人类的,至少让程序员很看不惯
2.bat结合python --使用极少的bat结合python,实际就是在bat中调用python文件解决一些参数问题
两种方案都要求批处理的第一个参数必须是jdk版本,目前这个参数的值简化为 JDK17 或者其它值
如果不介意多打一些命令,就不要考虑后文内容。
一、maven项目中pom的build部分
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>copy-resources</id> <phase>process-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.outputDirectory}</outputDirectory> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.java</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <release>17</release> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
注意jdk17中 compile部分使用release不需要使用source,target,但要继续用,好像也可以。
至于是否保留源码,看项目要求。
二、纯bat方案
在一个设置了path变量值的目录(例如 d:\dev\bat\)下创建文件maven.bat,内容如下:
@echo off rem set s=AAA BBB CCC DDD EEE FFF ask=sssss set s=%* set t=%s% setlocal enableextensions enabledelayedexpansion set /a result2 set /a q=0 set /a firstParam :loop for /f "tokens=1*" %%a in ("%t%") do ( rem echo %%a set t=%%b if !q! gtr 0 set result2=!result2!%%a if !q! equ 0 ( ECHO 第一个参数:%%a 需要被忽略 set firstParam=%%a ) set /a q=q+1 echo !q! %%a ) if defined t goto :loop rem set /a q=q-1 echo 原来输入参数个数:%q% rem set result2=!result2:~1,-1! echo 第一个参数是:%firstParam% echo 新参数字符串:!result2! if %firstParam%==jdk17 ( echo 您选择的是JDK17 goto chooseJDK17 ) if %firstParam%==JDK17 ( echo 您选择的是JDK17 goto chooseJDK17 ) SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0_251 goto runMaven :chooseJDK17 SET JAVA_HOME=C:\Program Files\Java\jdk-17.0.1 goto runMaven :runMaven mvn !result2!
maven JDK17 clean compile package install -Dmaven.skip.test=true
结果成功,具体略。
三、bat结合python
先写bat文件 new-maven.bat
python D:\soft\java\apache-maven-3.8.4-bin\bin\maven.py %*
然后是maven.py文件
import sys import os def main(): _maven(sys.argv); def _maven(args): i=0 argQty=len(args); newArgStr=""; jdkVersion="" print(f"总的参数个数是:{argQty}") for j in range(1,argQty): if j==1: jdkVersion=args[j]; else: print(args[j]) newArgStr=newArgStr+" "+args[j] print(f"第一个参数{jdkVersion}表示JDK版本,真正的参数是:{newArgStr}") setCmd="" if (jdkVersion.lower()=="jdk17"): setCmd="set JAVA_HOME=C:\Program Files\Java\jdk-17.0.1" else: setCmd="set JAVA_HOME=C:\Program Fil