由于特定情况,本机下有多个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

jdk17+spring6下打jar包的更多相关文章

  1. 如何为libs目录下的jar包关联源代码

    以前,我们可以为lib目录下的jar包关联源代码,但是现在似乎不行了. 下面是一篇讲述此问题解决方法的文章: How to attach javadoc or sources to jars in l ...

  2. eclipse 下生成jar包

    eclipse 下生成jar包 第一:普通类导出jar包,我说的普通类就是指此类包含main方法,并且没有用到别的jar包. 1.在eclipse中选择你要导出的类或者package,右击,选择Exp ...

  3. Android Studio下导出jar包和aar包

    Android Studio下导出jar包和aar包 jar包和aar包的区别 步骤 1. 创建Android工程 创建工程比较简单,不错复述 2. 创建一个Library(Module) 创建了一个 ...

  4. maven 项目pom文件引入lib下的jar包

    <dependency> <groupId>abc</groupId> <artifactId>abc</artifactId> <v ...

  5. IDEA中将WEB-INF\lib下的Jar包添加到项目中

    打开Project Structure[可以使用快捷键:Ctrl+Alt+Shift+S]左侧选中Modules,在Dependecies中,点击右侧“+”号,选择JARS or directorie ...

  6. 既使用maven编译,又使用lib下的Jar包

    <build> <finalName>xxx</finalName> <plugins> <plugin> <groupId>o ...

  7. Windows/Linux下引用jar包,并用javac/java编译运行

    Windows/Linux下引用jar包,并用javac/java编译运行,有需要的朋友可以参考下. 1> Windows 假设要引用的jar放在D:/test目录下,名字为t1.jar, ja ...

  8. idea maven项目如何使用lib下得jar包

    在项目开发中,一般使用maven来管理项目,但有时还需要引用本地lib下的jar包 比如,中央仓库没有jar包.这时我们就需要引入lib下的jar包了. 1.首先在dependencies里加入本地j ...

  9. idea lib下有jar包但是仍然报错 找不到类

    现象: idea lib下有jar包但是仍然报错 找不到类 但是有个奇怪现象 同样的配置下项目在eclipse中可以正常编译 启动. package com.puhui.car.aspect; imp ...

  10. 解决maven无法加载本地lib/下的jar包问题(程序包XXX不存在)

    这次一个项目用到maven编译,我在本地开发的时候jar包都是放在WEB-INF/lib目录下,通过 BuildPath将jar包导入,然后用MyEclipse中的:maven package命令打成 ...

随机推荐

  1. 提取jks文件证书和私钥

    提取jks文件证书和私钥 JKS文件由公钥和密钥构成利用Java Keytool 工具生成的文件,它是由公钥和密钥构成的,公钥就是我们平时说的证书(.cer后缀的文件),私钥就是密钥(.key后缀的文 ...

  2. 八、Dataphin

    Dataphin是阿里巴巴集团OneData数据治理方法论内部实践的云化输出,一站式提供数据采.建.管.用全生命周期的大数据能力,以助力企业显著提升数据治理水平,构建质量可靠.消费便捷.生产安全经济的 ...

  3. go http请求如果参数中带有"等特殊字符,参数传输可能会出现问题

    编码完整的URL url.QueryEscape(urlStr) 编码完整的URL 如果我们要对完整的 URL 进行编码呢? 就是PHP中 urlencode() 函数的功能. 在 GO 语言下可以直 ...

  4. 在项目中使用UEditor碰到的几个问题

    1.文本编辑器的下拉框无法使用.即选择字号字体的下拉选择框无法使用. 通过调试,发现不是编辑器的下拉框没有出来,而是下拉框显示在弹出框的底部,猜测是否和z-index属性有关. 产生这个问题的原因是文 ...

  5. OpenNESS NTS 的前世今生

    目录 文章目录 目录 NEV SDK NEV SDK 的软件架构 NEV SDK 的持续演进 OpenNESS NTS NTS 在 VM 场景中的应用 NTS 在 Container 场景中的应用 N ...

  6. 4G EPS 中的小区选择

    目录 文章目录 目录 前文列表 小区选择 RSRP(参考信号接收功率) RSRQ(参考信号接收质量) RSSI(接收信号强度指示) SINR(信号与干扰加噪声比) 前文列表 <4G EPS 中的 ...

  7. VSCode:Mac(M1)配置VSCode中C/C++环境(只需三步)

    只需三步. 1. 下载CodeLLDB插件: 2. 配置tasks.json { "version": "2.0.0", "tasks": ...

  8. HTML——input之密码框

    在 HTML 中,把 <input> 标签的 type 属性设置为 password 可以表示密码框.具体语法格式如下: <input type="password&quo ...

  9. Angular等了三年,那个她已经来了

    Angular生态丰富,功能强大,支撑了许多大型项目的开发.而且一直在前方等待着其他框架跟上.但是不得不直面的一个问题就是:"在等待其他框架跟上的这三年",Angular在陆陆续续 ...

  10. 支持表格识别,PaddleOCRSharp最新发布

    PaddleOCRSharp 2.3.0已经发布nuget包. 项目开源地址:https://gitee.com/raoyutian/paddle-ocrsharp 2.3.0更新内容: 1.增加表格 ...