one-jar删除有关应用程序负载的详细警告信息
我正在使用Maven,使用one-jar插件,但是当我运行一个jar可执行文件时,我遇到了警告墙,这是不可接受的
我已经查看了一个jar子上的每个可用资源,看不到如何保持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)
我发现如果你创建一个one-jar.properties
文件并将其放在运行时类路径的根目录中(即你的项目.class文件最终的位置),它将被一个jar的Boot类读取。 此属性文件中的条目,例如:
one-jar.silent=true
将完全禁止一个jar日志消息。
Boot类寻找的其他值是one-jar.info
和one-jar.verbose
。
默认级别为INFO。 正如Pascal Thivent所指出的那样,你也可以通过命令行使用java
命令的-D
参数设置一个System属性,但如果你不想要规定或记住它,那么属性文件方法效果很好。
在“详细”模式下运行时,似乎会打印这些消息。 我没有得到的是,默认情况下似乎没有激活详细模式。
无论如何,你可以尝试在运行one-jar时将one-jar.verbose
系统属性设置为false
:
java -Done-jar.verbose=false -jar
关于最新和最伟大的One-Jar v0.97:问题出在那里。 实际上需要将’one -jar.properties’文件放入最终jar的根目录中。 当然,它会有一行读取, one-jar.silent=true
。 这可以通过在
任务中设置类似
在Ant中完成。
也可以使用java -Done-jar.silent=true -jar foo-jar-made-by-one-jar.jar
命令将java -Done-jar.silent=true -jar foo-jar-made-by-one-jar.jar
命令行。
尽管如此,在安静之前,它仍然会报告一行是从One-Jar内部Boot类加载属性。 如果不更改源代码,则无法在Boot.java中从第317行开始更改此方法,其中方法initializeProperties记录加载/合并操作。 请参阅One-Jar错误跟踪器中的SourceForge上的 错误ID 3609329 ,我提供了快速修复。
简介:通过添加one-jar.properties文件,除了一行无关日志记录之外的所有文件都将被删除。 这应该可以帮助Maven用户找到解决方法。
这在新版Maven one-jar插件中要好得多。
添加插件存储库:
one-jar http://onejar-maven-plugin.googlecode.com/svn/mavenrepo
并在插件定义中使用1.4.4版。
我发现我需要使用版本1.4.5 (1.4.4不起作用),然后建议将one -jar.properties文件放在我的jar文件的根目录下,单行读取one-jar.silent=true
jar one-jar.silent=true
为我工作。
正如之前有人建议的那样,我从1.4.3升级到1.4.4并达成了协议
有两个地方可以获得one-jar插件。
第一个声称只是从Maven的主存储库提供的第二个副本。 我被鼓励使用这个,因为它不需要指定第二个需要的额外插件存储库。 然而,当我切换到使用第二个(官方的)时,这个问题就消失了。
注意 – 传递-Done-jar.verbose = false对我有用,但是当在文件one-jar.properties中设置时,如上所述。
很久以前我提交了一个补丁,它只是使默认行为无声。
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
请多次重读“许可证”中的“原样,无保修”部分:)
没有修改源代码就没有办法做到这一点