翼度科技»论坛 编程开发 python 查看内容

jdk17+spring6下打jar包

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
由于特定情况,本机下有多个jdk,而JAVA_HOME又只有一个。
本人习惯在命令行下一个命令编译打包程序,如何解决这个问题? 研究了不少时间,得到了两个解决方案:
1.使用bat   --  非常烂,不是很建议,如果您是系统管理员则另当别论。因为我们都知道编写纯bat实在不是很愉快,bat的语法是反人类的,至少让程序员很看不惯
2.bat结合python --使用极少的bat结合python,实际就是在bat中调用python文件解决一些参数问题
两种方案都要求批处理的第一个参数必须是jdk版本,目前这个参数的值简化为 JDK17 或者其它值
如果不介意多打一些命令,就不要考虑后文内容。
一、maven项目中pom的build部分
  1. <build>
  2.         <plugins>
  3.             <plugin>
  4.                 <groupId>org.apache.maven.plugins</groupId>
  5.                 <artifactId>maven-resources-plugin</artifactId>
  6.                 <version>3.3.0</version>
  7.                 <executions>
  8.                     <execution>
  9.                         <id>copy-resources</id>
  10.                         <phase>process-resources</phase>
  11.                         <goals>
  12.                         <goal>copy-resources</goal>
  13.                         </goals>
  14.                         <configuration>
  15.                         <outputDirectory>${project.build.outputDirectory}</outputDirectory>
  16.                         <resources>
  17.                             <resource>
  18.                             <directory>src/main/java</directory>
  19.                             <includes>
  20.                                 <include>**/*.java</include>
  21.                             </includes>
  22.                             </resource>
  23.                         </resources>
  24.                         </configuration>
  25.                     </execution>
  26.                 </executions>
  27.             </plugin>
  28.             <plugin>
  29.                 <groupId>org.apache.maven.plugins</groupId>
  30.                 <artifactId>maven-compiler-plugin</artifactId>
  31.                 <version>3.10.1</version>
  32.                 <configuration>                    
  33.                     <release>17</release>
  34.                     <encoding>UTF-8</encoding>   
  35.                 </configuration>
  36.             </plugin>
  37.         </plugins>
  38.     </build>
复制代码
注意jdk17中 compile部分使用release不需要使用source,target,但要继续用,好像也可以。
至于是否保留源码,看项目要求。
二、纯bat方案

在一个设置了path变量值的目录(例如 d:\dev\bat\)下创建文件maven.bat,内容如下:
  1. @echo off
  2. rem set s=AAA BBB CCC DDD EEE FFF ask=sssss
  3. set s=%*
  4. set t=%s%
  5. setlocal  enableextensions enabledelayedexpansion
  6. set /a result2
  7. set /a q=0
  8. set /a firstParam
  9. :loop
  10. for /f "tokens=1*" %%a in ("%t%") do (
  11.    rem echo %%a   
  12.    set t=%%b
  13.    
  14.    if !q! gtr 0 set result2=!result2!%%a   
  15.    if !q! equ 0  (     
  16.      ECHO 第一个参数:%%a 需要被忽略
  17.      set firstParam=%%a
  18.    )
  19.    set /a q=q+1
  20.    echo !q! %%a  
  21. )
  22. if defined t goto :loop
  23. rem set /a q=q-1
  24. echo 原来输入参数个数:%q%
  25. rem set result2=!result2:~1,-1!
  26. echo 第一个参数是:%firstParam%
  27. echo 新参数字符串:!result2!
  28. if %firstParam%==jdk17 (
  29.   echo 您选择的是JDK17
  30.   goto chooseJDK17  
  31. )
  32. if %firstParam%==JDK17 (
  33.   echo 您选择的是JDK17
  34.   goto chooseJDK17  
  35. )
  36. SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0_251
  37. goto runMaven
  38. :chooseJDK17
  39. SET JAVA_HOME=C:\Program Files\Java\jdk-17.0.1
  40. goto runMaven
  41. :runMaven
  42. mvn !result2!
复制代码
maven JDK17 clean compile package install -Dmaven.skip.test=true
结果成功,具体略。
三、bat结合python

先写bat文件 new-maven.bat
  1. python D:\soft\java\apache-maven-3.8.4-bin\bin\maven.py %*
复制代码
然后是maven.py文件
  1. import sys
  2. import os
  3. def main():   
  4.     _maven(sys.argv);
  5. def _maven(args):
  6.     i=0
  7.     argQty=len(args);
  8.     newArgStr="";
  9.     jdkVersion=""
  10.     print(f"总的参数个数是:{argQty}")
  11.     for j in range(1,argQty):
  12.         if j==1:
  13.             jdkVersion=args[j];
  14.         else:
  15.             print(args[j])
  16.             newArgStr=newArgStr+" "+args[j]
  17.     print(f"第一个参数{jdkVersion}表示JDK版本,真正的参数是:{newArgStr}")
  18.     setCmd=""
  19.     if (jdkVersion.lower()=="jdk17"):
  20.         setCmd="set JAVA_HOME=C:\Program Files\Java\jdk-17.0.1"
  21.     else:
  22.         setCmd="set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_251"
  23.         
  24.     print(f"执行新的bat命令:{setCmd}");
  25.     setCmd="cmd /c ""+setCmd+"& mvn "+newArgStr+""";
  26.     print(f"新构建命令是 {setCmd}")
  27.     os.system(setCmd);
  28. if __name__ == "__main__":
  29.     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
 

来源:https://www.cnblogs.com/lzfhope/p/17201274.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具