马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
由于特定情况,本机下有多个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 Files\Java\jdk1.8.0_251"
-
- print(f"执行新的bat命令:{setCmd}");
- setCmd="cmd /c ""+setCmd+"& mvn "+newArgStr+""";
- print(f"新构建命令是 {setCmd}")
- os.system(setCmd);
- if __name__ == "__main__":
- main()
复制代码 new-maven JDK17 clean compile package install -Dmaven.skip.test=true
结果成功,具体略。
四、小结
1.作为程序员,bat要会,但是如果环境允许,还是不要用bat编写批处理脚本。同理在linux中也尽量可以把脚本语言调整为python
现在的linux系列的服务器,版本新一些的,一般可以默认安装python,所以写python脚本还是非常方便的。
如果是windows服务器,安装一个python也非常容易
2.bat和bash的语法实在很不友好,而且容易遗忘,远远不如写python程序来得直接
这里列出bat几点吐槽的地方:
a.处理命令行传参
b.字符串操作,幼稚,难记,看起来非常奇怪的语法
c.变量赋值 ,还要弄清楚什么延迟变量等奇怪的内容
d.条件语句,写复杂的if else if 简直要命
没有什么是特别好用。为什么微软会搞这种情况怪的语法?脑袋大概被砸了?炫技的充分性很足?
但如果脚本和这些没有太大关系,倒是不反对用bat或者bash写,例如这样的bat
mkdir test
dir test
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
|