【问题标题】:How to resolve Groovy conflict with Apache Common Logging?如何解决 Groovy 与 Apache Common Logging 的冲突?
【发布时间】:2010-11-23 13:23:03
【问题描述】:

这是我自定义的 maven Groovy 执行:

[...]
<plugin>
  <groupId>org.codehaus.groovy.maven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.0-rc-5-SNAPSHOT</version>
  <executions>
    <execution>
      <phase>prepare-package</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <classpath>
          <element>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
          </element
        </classpath>
        <source>
          import org.apache.commons.httpclient.HttpClient;
          // ...
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>
[...]

这是 Maven 所说的:

[...]
[ERROR] Failed to execute goal org.codehaus.groovy.maven:gmaven-plugin:1.0-rc-5-SNAPSHOT:execute (...) on project XXX: 
java.lang.ExceptionInInitializerError: org.apache.commons.logging.LogConfigurationException:
org.apache.commons.logging.LogConfigurationException: 
Invalid class loader hierarchy.  
You have more than one version of 'org.apache.commons.logging.Log' visible, 
which is not allowed. 
(Caused by org.apache.commons.logging.LogConfigurationException: 
Invalid class loader hierarchy.
[...]

我想我明白它为什么会发生,但我该如何解决呢?

【问题讨论】:

标签: java logging groovy maven


【解决方案1】:

如果不查看整个 pom.xml 文件,很难准确地说出如何解决此问题,但我建议查看标签。您可以使用以下内容排除额外的依赖项:

<plugin>
    ...
    ...
    <dependencies>
        <dependency>
            <artifactId>...</artifactId>
            <groupId>...</groupId>
            <version>...</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>                        
                <exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</plugin>

【讨论】:

  • 我为我的项目添加了commons-logging。我不能完全排除它:) 我只需要为这个特定的 Groovy sn-p 排除它。可能吗?
  • Vincenzo,你的 'commons-httpd' 也有一个 commons-logging 依赖。因此,当您尝试使用 commons-httpclient(您包含的一个,以及它想要使用的一个)时,您有两个“commons-logging”依赖项发生冲突。我建议你做的是排除 commons-httpclient 想要使用的那个。
  • 没错,但是如何排除呢?
【解决方案2】:

升级到 1.3 版解决了这个问题。

【讨论】:

    【解决方案3】:

    使用 mvn dependency:tree 检查谁在导入该依赖项并消除冲突。

    【讨论】:

    • 我知道是谁在导入这个依赖,就是我 :) 我的项目中需要这个 JAR,我不能排除它。我只是希望 Gmaven 不要再次导入它。我可以这样做吗?
    猜你喜欢
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多