2017-01-03 80 views
2

我的項目有很多依賴我告訴winrun4j通過在ini文件中設置Winrun4j:超過最大的classpath大小

classpath.1=D:\lib\*.jar 

包括所有的人。

服務日誌告訴我,那winrun4j擴大classpath中,並生成類路徑:

[info] Expanding Classpath: D:\lib\*.jar 
[info] Expanding Classpath: D:\lib\activation-1.1.1.jar 
[info] Expanding Classpath: D:\lib\activemq-client-5.10.2.jar 
[...] 
[...]many, many other libs here 
[...] 
[warn] Exceeded maximum classpath size 
[info] Generated Classpath: D:\lib\activation-.1.1.jar;D:\lib\activemq-client-5.10.2.jar;[...] 

爲什麼winrun4j產生這樣的類路徑?難道不夠就拿

D:\lib\*.jar 

解決方案的任何想法,使服務與許多依賴項一起運行?

+0

java命令本身應該允許在類路徑中使用「*」通配符。所以也許這是winrun4j本身的一個問題。你有沒有檢查過該工具是否有一些你可以查看的論壇/ bugtracker? – GhostCat

回答

3

這是很長一段時間稱爲winrun4j問題,不解決,這裏討論:

超出最大的類路徑長度#59

https://github.com/poidasmith/winrun4j/issues/59

這裏:

添加INI選項以禁用類路徑glob擴展#67

https://github.com/poidasmith/winrun4j/issues/67

不幸的是,你還沒有很多的可能性。如問題59所示,您可以將工作目錄設置爲模塊目錄。你可以留出一些字符。

D:\lib\activation-.1.1.jar;將成爲lib\activation-.1.1.jar;。 您也可以檢查是否需要所有依賴關係。

如果還不夠,你應該認真尋找替代品,如JSmooth或Launch4J。

+0

這顯然是答案,謝謝你的建議。 – Michi

+0

歡迎您:) – davidxxx

1

這是winrun4j具體問題,你可以在winrun4j代碼,這個消息是硬編碼看,Classpath.cpp Github

// Check for too many results 
    if(*current >= max) { 
     if(!g_classpathMaxWarned) { 
      Log::Warning("Exceeded maximum classpath size"); 
      g_classpathMaxWarned = true; 
     } 
     return; 
} 

從代碼,我無法找出確切值max但也有單元測試在代碼基地,它將其設置爲260.

我認爲,這是從MAX_PATH進入圖片relevant question

正如在另一個答案中指出的那樣,由於極限是硬編碼的,所以問題沒有解決。

+0

謝謝,但只有當生成的類路徑長度大於260個字符時,纔會顯示日誌消息。記錄生成的類路徑在3996個字符後被剪切。 – Michi

+0

那就是我不確定的價值。我無法在他們的代碼庫中找到這個值,似乎來自某個頭文件。 –

1

不是將所有依賴關係放入libs文件夾並將它們添加到類路徑中,而是可以構建一個包含所有依賴庫的fat-JAR文件。

如何實現這一點取決於您使用的構建系統(例如gradle或maven)。或者你可以看看默認情況下使用fat-JAR的spring-boot。

相關問題