【问题标题】:Maven Jetty spams warning "scanned from multiple locations"Maven Jetty 垃圾邮件警告“从多个位置扫描”
【发布时间】:2019-02-23 10:07:24
【问题描述】:

我发现了一个类似的问题here,但它指向了一个我没有使用的插件(maven-failsafe-plugin),并且该解决方案所指的配置不适用于我。

问题是因为我已经从

更新了我的码头插件
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.9.v20160517</version>

&lt;version&gt;9.4.11.v20180605&lt;/version&gt; ,它开始向数百条警告发送垃圾邮件,例如

[WARNING] org.apache.axis2.description.java2wsdl.bytecode.ClassReader scanned from multiple locations: jar:file:///C:/Users/a0763323/.m2/repository/org/apache/axis2/axis2-kernel/1.4.1/axis2-kernel-1.4.1.jar!/org/apache/axis2/description/java2wsdl/bytecode/ClassReader.class, jar:file:///C:/Users/a0763323/.m2/repository/it/aon/WSInfocar/1.2/WSInfocar-1.2.jar!/org/apache/axis2/description/java2wsdl/bytecode/ClassReader.class
[WARNING] org.apache.axis2.description.java2wsdl.bytecode.MethodTable scanned from multiple locations: jar:file:///C:/Users/a0763323/.m2/repository/org/apache/axis2/axis2-kernel/1.4.1/axis2-kernel-1.4.1.jar!/org/apache/axis2/description/java2wsdl/bytecode/MethodTable.class, jar:file:///C:/Users/a0763323/.m2/repository/it/aon/WSInfocar/1.2/WSInfocar-1.2.jar!/org/apache/axis2/description/java2wsdl/bytecode/MethodTable.class
[WARNING] org.apache.axis2.description.java2wsdl.bytecode.ParamNameExtractor scanned from multiple locations: jar:file:///C:/Users/a0763323/.m2/repository/org/apache/axis2/axis2-kernel/1.4.1/axis2-kernel-1.4.1

我到处搜索,但我既不明白这意味着什么,也不明白如何解决这个问题。

我正在使用 IntelliJ 和 maven 编译器插件

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>

谢谢

【问题讨论】:

  • 如果您列出了在码头中也可用的依赖项,则可能会发生这种情况。要解决此问题,请确保这些依赖项具有 provided scope

标签: java maven jetty


【解决方案1】:

我整天都在寻找这个问题的解决方案,如果你想忽略jetty中的WARN日志,你可以试试这个:

--exec
-Dorg.eclipse.jetty.annotations.AnnotationParser.LEVEL=OFF

将这些代码附加到start.inijetty 文件中,然后重新启动jetty。

【讨论】:

  • 这隐藏了一个非常糟糕的环境,它会随机运行,有时会工作,有时会崩溃。这是一个合法的警告,您必须修复以拥有一个健全的环境。此外,关闭所有日志记录意味着您永远不会知道其他警告。
  • 使用 Maven 插件的 jetty:run 目标时如何设置?
【解决方案2】:

我发现这个问题和回复最有帮助。我与 JDT Core 和 Java Eclipse 编译器有冲突。我转到属性并单击 Java 编译器一次更改一件事并进行测试。从使用 JRE 1.8 更改为 JRE 11 运行时在我测试的所有内容中为我解决了这个问题。

我已经检查过: 启用项目特定设置 使用默认合规设置 (1.8)

这会发出一个通知: 选择 1.8 合规性时,请务必安装并激活兼容的 JRE(当前为 11)。配置已安装的 JRE 或执行环境或更改构建路径。

同样,一次更改一件事,然后进行测试。我特别选择了 1.8 JRE,因为我读到 Java 11 没有发布 JRE。这个问题我还不是很清楚。

【讨论】:

    【解决方案3】:

    让我们分解一下......

    [警告] org.apache.axis2.description.java2wsdl.bytecode.ClassReader 从多个位置扫描:

    • jar:file:///C:/Users/a0763323/.m2/repository/org/apache/axis2/axis2-kernel/1.4.1/axis2-kernel-1.4.1.jar!/org/apache /axis2/description/java2wsdl/bytecode/ClassReader.class,
    • jar:file:///C:/Users/a0763323/.m2/repository/it/aon/WSInfocar/1.2/WSInfocar-1.2.jar!/org/apache/axis2/description/java2wsdl/bytecode/ClassReader .class

    您有来自 2 个不同 JAR 的 org.apache.axis2.description.java2wsdl.bytecode.ClassReader 类(并且似乎在两个不同版本上!)

    从您的文件系统路径来看,您可能具有以下 maven 依赖项...

    <dependency>
      <groupId>org.apache.axis2</groupId>
      <artifactId>axis2-kernel</artifactId>
      <version>1.4.1</version>
    </dependency>
    
    <dependency>
      <groupId>it.aon.WSInfocar</groupId>
      <artifactId>WSInfocar</artifactId>
      <version>1.2</version>
    </dependency>
    

    在你的类路径/类加载器上有同一个类的两个不同版本是极端不明智的(很容易使用一个版本,然后传递给另一个版本上的不同类,它不会理解它或被能用)

    您需要手动确定应该使用哪一个。 您可能想问WSInfocar 的开发人员为什么他们也在自己的工件中捆绑轴。

    【讨论】:

    • 感谢您的回复。我认为这可能接近问题,但在我的 pom 中我没有任何明确的org.apache.axis2 导入。可能是从另一个库导入的?
    • 关于捆绑:既然 make WSInfocar 运行需要轴,为什么将它捆绑在里面是错误的?
    • servlet 规范扫描字节码必须扫描存在的所有 jar 以查找特定的东西(例如:对启动很重要的实现和注释等等)。如果在运行时使用了某些东西,那么“import”的使用是一个无关紧要的指标,现在动态创建和执行的东西太多了。
    • WSInfocar 不是用 Maven 构建的,POM 是从 install:install-file 创建的。会不会是这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2023-01-07
    • 2017-06-15
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多