当前位置: 首页 > 知识库问答 >
问题:

NoClassDefFoundError在运行一个有效的jar(使用依赖项编译)时,尽管在pom上具有Commons-httpClient和http组件依赖项

姬凡
2023-03-14

我正在尝试通过从main方法(不在测试范围内)使用selenium webDrive来自动化一个简单的用户行为。从编译器运行以下代码时,它可以工作!但是在多个案例中运行jar时-面临以下问题(我在Ubuntu上运行,使用java 7)

线程“main”java.lang.NoClassDefFoundError中出现异常:org/apache/http/conn/HttpClientConnectionManager

@日志公共类主程序{

public  WebDriver driver = new FirefoxDriver();

public static void main(String args[]) {
 //   Injector injector = Guice.createInjector(new WebModule());

    System.out.println("Browser will soon be opened");
    MainProgram mainProgram = new MainProgram();
    mainProgram.run();

}

public void run(){

    driver.get("http://www.google.co.il");
    WebElement lookFor = driver.findElement(By.name("q"));

    if(!lookFor.isDisplayed()){
        driver.close();
      log.log(Level.WARNING,"Failed!");
    };
    driver.close();

}

}

WebDriver对pom的依赖:

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-server</artifactId>
        <version>2.42.2</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.42.2</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-api</artifactId>
        <version>2.42.2</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-firefox-driver</artifactId>
        <version>2.42.2</version>
    </dependency>

Case A

 when removed -commons-httpclient - received: HttpClientConnectionManager as follows:

<!--
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>-->

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.4</version>
          <!--  <scope>test</scope>-->
        </dependency>


Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/conn/HttpClientConnectionManager
    at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:99)
    at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:82)
    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:77)

-------------------------------------------------------------------------------------------------------------------------------------------
Case B

removed both commons-httpclient + httpcomponents received HttpClientConnectionManager:

<!--        &lt;!&ndash;
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>&ndash;&gt;

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.4</version>
          &lt;!&ndash;  <scope>test</scope>&ndash;&gt;
        </dependency>-->


liron@liron-Latitude-3330:~$ java -jar automatic-tests-4.0-SNAPSHOT-jar-with-dependencies.jar
Try
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/conn/HttpClientConnectionManager
    at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:99)
    at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:82)

---------------------------------------------------------------------------------------------------------------------------------------------

Case C
when both were added to pom - same HttpClientConnectionManager


liron@liron-Latitude-3330:~$ java -jar automatic-tests-4.0-SNAPSHOT-jar-with-dependencies.jar
Browser will soon be opened
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/conn/HttpClientConnectionManager
    at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:99)
    at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:82)
    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:77)


----------------------------------------------------------------------------------------------------------------------------------------------

共有3个答案

陈允晨
2023-03-14

添加新的谷歌番石榴对我有帮助:

<dependency>
   <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>21.0</version>
</dependency>

这是因为其他依赖项可以下载旧的一个Guava18版本<当然,正如testphreak所说:org。阿帕奇。httpcomponents公司

轩辕乐邦
2023-03-14

您应该只需要selenium-java在您的pom依赖项中。请参阅此图形@Selenium HQ,它解释了Selenium的某些部分是如何相关的。此外,Selenium本身对httpClient有依赖项,您不需要显式定义它们。如果您确实对这些有合法的需求,事情会发生冲突,您需要使用排除来清理它。

清理pom后,可以运行mvn dependency:tree查看项目中的情况。

杭志泽
2023-03-14

昨晚我的WebDriver项目遇到了同样的问题,经过一些调试,发现它缺少以下依赖项。添加它们后,我没有再次遇到这个异常。

   <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
       <version>4.3.5</version>
   </dependency>
 类似资料:
  • 问题内容: 我有一个写在Apache Commons顶部的辅助库,当我尝试对其进行javac处理(以便可以将其放入jar中)时,它很抱怨地说,它不知道我在说什么关于何时参考commons.jar中的内容。 如何包含一个jar以便javac可以编译? 问题答案: 对于Windows: 对于Unix或Mac(感谢Dawood提示): 意思是:

  • 将Android Studio从Canary 3更新到Canary 4后,在构建时抛出以下错误。 Android依赖项“com.Android.support:support-support-v4”的编译类路径(25.2.0)和运行时类路径(26.0.0-beta2)版本不同。您应该通过DependencyResolution手动设置相同的版本。 app-build.gradle Library-

  • Java和Maven新手。 我试图配置我的应用程序,以便我可以通过cmd线生成一个jar,其中包含我所有的依赖项。 据我所知,我正在正确设置Pom以使用此插件:https://github.com/javafx-maven-plugin/javafx-maven-plugin 以下是我在Pom中的依赖项: 在我的

  • 我试图用Maven做一个小程序。我使用的是来自我大学教授的模板,我想使用log4j进行日志记录。当我在eclipse中运行该程序时,它工作得很好。然而,当我用“MVN install”创建jar并尝试用cmd运行程序时,我得到的是一个NoClassDefFoundError 我在这里还发现了这一点:NoClassDefFoundError在Maven依赖上,我尝试使用maven-shade-plu

  • 问题内容: 这是我目前拥有的并且可以正常工作: 现在,我想添加另一个依赖项。我将其更改为: 但是现在我收到此错误消息: FragmentFacebookLoginComponent依赖于多个作用域组件 我该如何解决?我如何有多个依赖关系? 如果我从一个组件中删除范围,则会收到此错误消息: AnotherComponent(无作用域)不能依赖范围内的组件 问题答案: 最后,我创建了一个具有正确范围的

  • 我的pom.xml如下所示: 有人能帮我吗?