2010-09-07 23 views
13

我正在使用Maven,使用一個jar插件,但是當我運行一個jar可執行文件時,我遇到了警告牆,這是不可接受的使用one-jar刪除有關應用程序加載的詳細警告信息

我已經看過每個可用的資源上的一個罐子,並看到沒有指示如何保持罐子噴出噸警告運行時,有沒有人解決這個問題?

JarClassLoader: Warning: META-INF/LICENSE.txt in lib/commons-io-1.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
JarClassLoader: Warning: META-INF/NOTICE.txt in lib/commons-io-1.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
JarClassLoader: Warning: META-INF/LICENSE.txt in lib/commons-lang-2.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
JarClassLoader: Warning: META-INF/NOTICE.txt in lib/commons-lang-2.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
+2

我懷疑的警告與onejar有關。這可能與包裝在超級罐子裏的罐子有關。謹慎使用您觀察到的警告來更新問題? –

+0

我已經添加了我正在談論的警告,我做了大量的谷歌搜索,並沒有發現任何人抱怨類似的東西,應用程序運行良好,但作爲一個控制檯應用程序,我用jar中的參數運行,有數百行滾動我的控制檯應用程序運行前分心和不需要 – walnutmon

+0

我相信這是onejar,http://www.koders.com/java/fid47EFFE76AC8A4DF788B368D79D29DFE89BE94A19.aspx?s=ByteCode#L122顯示源代碼JarClassLoader是一個onejar包,它有我在這裏看到的打印語句。什麼樣的分佈式java庫最近使用system.out? – walnutmon

回答

-1

有沒有辦法做到這一點無需修改源代碼

+2

這是錯誤的。使用「-Done-jar.silent = true」爲我工作。 – ingyhere

+0

Pascal Thivent的答案也起作用 – rapvelopment

+0

版本1.4.5和one-jar.properties文件可以完成其他人提到的技巧。 –

8

看起來,這些消息打印時運行在「詳細」模式。我沒有得到的是,詳細模式似乎沒有被默認激活。

不管怎麼說,你能嘗試運行的一個罐子當one-jar.verbose系統屬性設置爲false

java -Done-jar.verbose=false -jar <one-jar.jar> 
+0

我已經深入瞭解這個問題,你絕對正確,不幸的是,這個項目的狀態是,maven插件不允許你指定相關代碼的版本,所以你看到的源代碼isn不是由插件執行的實際源代碼...有人需要以正​​確的方式重新創建該插件,因爲包含的源代碼版本中存在已修復的問題,但無法找到它們通過maven。我最終得到了一箇舊版本,以避免這些非常惱人的系統輸出,但後來春天的東西壞了,所以選擇我的毒藥 – walnutmon

+0

@walnutmon從你的描述看,事情看起來不太好:S –

+2

'java -Done-jar。 verbose = false -jar '技巧對我不起作用。 – Withheld

1

這是多少在新版本的Maven one-jar插件中更好。

添加插件庫:

<pluginRepository> 
     <id>one-jar</id> 
     <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url> 
    </pluginRepository> 

,並在插件定義使用1.4.4版。

+0

我會在不久的將來需要一個jar,當我使用它時,我會嘗試你在上面添加的東西,如果它有效,請接受你的答案。謝謝! – walnutmon

+0

我正在使用版本1.4.4,但看到相同的警告消息。你指定了哪個版本的one-jar(例如' 0.97')? –

0

我升級fromr 1.4.3至1.4.4有人建議前,這讓交易

9

我發現,如果你創建一個one-jar.properties文件,並把它在運行時classpath的根目錄(即,你的項目.class文件結束),它將被一個jar的Boot類讀取。此屬性文件中的條目如:

one-jar.silent=true 

將完全禁止單罐日誌消息。

Boot類尋找的其他值是one-jar.infoone-jar.verbose

默認級別是INFO。正如Pascal Thivent上面所指出的那樣,您也可以通過java命令的-D參數通過命令行設置系統屬性,但是如果您不想規定或記住這一點,則屬性文件方法效果很好。

+1

這可以工作,但道具文件的位置應該位於最終jar的根目錄中。 – ingyhere

+0

@ingyhere,如何把這個文件放在最終jar的根目錄下? – Alexandr

+0

@Alexandr最簡單的方法是用7-zip打開並放入。 – ingyhere

0

有兩個地方可以獲得one-jar插件。

  1. https://github.com/jolira/onejar-maven-plugin
  2. http://code.google.com/p/onejar-maven-plugin/

第1人自稱只是一個這是一個從Maven的主要倉庫擔任第二屆一個副本。我被鼓勵使用這個,因爲它不需要指定第二個需要的額外插件庫。但是,當我轉用第二個(官方的)時,這個問題就不存在了。

注 - 傳遞-Done-jar.verbose = false爲我工作,但不是如上面某人所述在文件one-jar.properties中設置時。

3

關於最新和最大的One-Jar v0.97:問題出在那裏。'one-jar.properties'文件實際上需要放入最終jar的根目錄。當然,它將有一行讀取one-jar.silent=true。這可以通過在<one-jar ...>任務內設置<fileset dir="${build.dir}" includes="**/*.properties" />之類的東西在Ant中完成。

使用java -Done-jar.silent=true -jar foo-jar-made-by-one-jar.jar命令也可以輕鬆地將它放入命令行。

不過,它仍然會報告一行,它會在安靜之前從One-Jar內部Boot類中加載屬性。如果不改變Boot.java中第317行開始的源代碼,方法initializeProperties會記錄加載/合併操作,但是沒有辦法解決這個問題。請參閱錯誤ID 3609329SourceForge在One-Jar錯誤跟蹤器中,我提供了快速修復。

摘要:通過添加one-jar.properties文件,除一行無關日誌以外的所有行都被刪除。這應該有助於Maven用戶找到解決方法。

1

我發現我需要使用版本1.4.5 (1.4.4不工作),然後建議放置one-jar.properties文件在我的jar文件的根與單行閱讀one-jar.silent=true爲我工作。

0

我很早以前就提交了一個補丁,只是默認行爲是默認的。

public static final int LOGLEVEL_VERBOSE = 5; 

    // Loglevel for all loggers. 
- private static int loglevel = LOGLEVEL_INFO; 
+ private static int loglevel = LOGLEVEL_NONE; 

    private final String prefix; 

AFAIK,它從未得到應用。最近,我固定的另一個問題,所以我把我的補丁在這裏:

https://github.com/nsoft/uno-jar

請重讀「保持原樣,不予保修」牌照幾次一部分:)