jdk17+spring6下打jar包

来源:https://www.cnblogs.com/lzfhope/archive/2023/03/09/17201274.html
-Advertisement-
Play Games

問題描述: 利用pyinstaller對python代碼打包後,dist文件夾中會生成一個xxx.exe可執行文件。打包成功,但運行exe時一閃而過(閃退)。捕捉不對到底是打包錯誤呢,還是其他異常?那麼如何解決? PS:以上現象在windows系統中會出現,在Linux和mac系統中不會出現。 解決 ...


由於特定情況,本機下有多個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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 先看如下一個DEMO示例代碼:(其中doBatchGet被子類重寫了1次) public abstract class BaseDemoService<T> { public String batchGet(T... ints) { T one=ints[0]; System.out.println ...
  • 前置知識: Web 伺服器:可以指硬體上的,也可以指軟體上的。從硬體的角度來說, Web 伺服器指的就是一臺存儲了網路服務軟體的電腦;從軟體的角度來說, Web 伺服器指的是一種軟體,比如 Tomcat。 Servlet 容器:目前主流的 Servlet 容器軟體包括 Tomcat、Jetty、J... ...
  • SpringBoot Controller 控制器 SpringBoot提供了@Controller和@RestController兩種註解來標識此類負責接收和處理HTTP請求。 如果請求的是頁面和數據,使用@Controller註解即可;如果只是請求數據,則可以使用@RestController註 ...
  • 1.學習目標 2.簡介 技術論壇:http://bbs.chinaunix.net/forum-240-1.html 資源地址:https://sourceforge.net/projects/fastdfs/ 源碼地址:https://github.com/happyfish100 FastDFS ...
  • 前言 對於大多數 maven 多模塊化工程,可以使用 Jacoco 這款工具,關於 Jacoco 這款工具,ChatGPT 對它的描述是這樣的: JaCoCo(Java Code Coverage)是一個開源的測試覆蓋率工具,它可以用於幫助開發人員衡量其軟體測試的有效性。它支持多種語言,包括 Jav ...
  • 1、Spring 1.1、簡介 Spring:春天 >給軟體行業帶來了春天! 2002,首次推出了Spring框架的雛形:interf21框架! Spring框架即以interface21框架為基礎,經過重新設計,並不斷豐富其內涵,於2004年3月24日發佈了1.0正式版。 Rod Johnson ...
  • 之前給大家寫過如何將 ChatGPT 接入微信和釘釘,沒看過的可以往公眾號前面的文章翻翻,最近又發現了一個有趣的玩法,周末找時間實現了一下,感覺挺不錯的,分享給大家。 背景 事情的起因是阿粉在朋友圈看到了這樣一條信息,敏感信息已經去掉了,意思很明顯就是將 OpenAI 接入到知識星球了,用戶可以通過 ...
  • Celery介紹、安裝、基本使用 一、Celery服務 什麼是Celery: Celery是一個簡單、靈活且可靠的,處理消息的分散式系統 Celery可以用來做什麼: 非同步任務 定時任務 延遲任務 Celery的運行原理: 可以不依賴任何服務,通過自身命令,啟動服務 celery服務為其他項目服務提 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...