[英]one-jar remove verbose warning information on application load
我正在使用Maven,使用one-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.jar>
关于最新和最伟大的One-Jar v0.97:问题出在那里。 实际上需要将'one -jar.properties'文件放入最终jar的根目录中。 当然,它会有一行读取, one-jar.silent=true
。 这可以通过在<one-jar ...>
任务中设置类似<fileset dir="${build.dir}" includes="**/*.properties" />
<one-jar ...>
完成。
也可以使用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用户找到解决方法。
我发现我需要使用版本1.4.5 (1.4.4不起作用)然后建议将one -jar.properties文件放在我的jar文件的根目录下,一行读取one-jar.silent=true
jar one-jar.silent=true
为我工作。
这在新版Maven one-jar插件中要好得多。
添加插件存储库:
<pluginRepository>
<id>one-jar</id>
<url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
</pluginRepository>
并在插件定义中使用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
请多次重读“许可证”中的“原样,无保修”部分:)
正如之前有人建议的那样,我从1.4.3升级到1.4.4并达成了协议
没有修改源代码就没有办法做到这一点
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.