首页 > 其他分享 >jdk17+spring6下打jar包

jdk17+spring6下打jar包

时间:2023-03-09 20:34:40浏览次数:43  
标签:bat set jdk17 jar setCmd echo maven python spring6

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

 

标签:bat,set,jdk17,jar,setCmd,echo,maven,python,spring6
From: https://www.cnblogs.com/lzfhope/p/17201274.html

相关文章

  • windows后台启动jar脚本
    创建一个demo.bat的脚本文件编辑脚本内容(注意修改文件中你的jdk与启动jar位置)@echooffchcp65001%1mshtavbscript:CreateObject("WScript.Shell").Run("%~s......
  • 获取当前jar包路径_java获取jar文件
    一、获取可执行jar包所在目录(1)方法一:使用System.getProperty("java.class.path")获取classpath的路径,若没有其他依赖,在cmd下运行该可执行jar包,则该值即为该jar包的绝对......
  • 获取当前jar包路径_java获取jar文件
    一、获取可执行jar包所在目录(1)方法一:使用System.getProperty("java.class.path")复制获取classpath的路径,若没有其他依赖,在cmd下运行该可执行jar包,则该值即为该jar包......
  • idea远程启动断点测试(jar)
    1.打开idea运行/调试配置2.选择添加--远程  3.输入linux服务ipxx,端口xx  4.登录linux服务器后台启动服务:java  -agentlib:jdwp=transport=dt_socket,......
  • 手牵手入门Spring6整合Mybatis3.5
    方式一Object类get和set,无参构造+有参构造Pom.xml引入依赖<!--打包方式jar--><packaging>jar</packaging><!--配置多个仓库--><repositories><!--Spring6-->......
  • ubuntu后台运行jar包
    ubuntu后台运行jar包,关闭远程命令终端不退出 cd/home/myfile/pic_system nohup java-jarzqy_system_2023022301.jar>log.txt2>&1&  ps-ef|grep......
  • Windows开机自启动运行Java的jar包
    Windows开机自启动运行Java的jar包 本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/2541直接打开电脑的目录......
  • springboot项目jar包混淆加密
    混淆工具jar包混淆工具挺多的,实现原理不尽相同,这里使用的classfinal加密执行以下命令java-jarclassfinal-fatjar.jar-fileyourproject.jar-libjarsa.jar,b.jar-......
  • java实现解压jar文件到某个目录/压缩某个目录为jar文件(好记性不如烂笔头)
    这里实现一个小功能,仅用于记忆功能:解压一个jar包到本地一个目录把一个目录压缩成一个jar包/***1,读取jar包,得到class文件*2,把class文件持久化到本地磁......
  • springboot启动报错 Failed to scan *****/derbyLocale_ja_JP.jar from classloader h
    springboot启动报错Failedtoscan*****/derbyLocale_ja_JP.jarfromclassloaderhierarchy 这两天自己在玩虚拟机,想把线上的平台复制一份到虚拟机上,jdk,tomcat服务,防......