Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala uber jar中的NoSuchMethodError异常_Scala_Maven_Selenium_Ssl_Apache Spark - Fatal编程技术网

Scala uber jar中的NoSuchMethodError异常

Scala uber jar中的NoSuchMethodError异常,scala,maven,selenium,ssl,apache-spark,Scala,Maven,Selenium,Ssl,Apache Spark,它们在我的pom.xml文件中。当我将maven项目中的驱动程序作为Scala应用程序运行时,它运行良好。但是当我创建一个带有依赖项的jar,并试图通过spark submit spark-submit --class package.signature.Driver --master local[*] /path/to/my/jar-with-dependencies.jar 我得到以下例外 线程“main”java.lang.NoSuchMethodError中出现异常: SSLConne

它们在我的
pom.xml
文件中。当我将maven项目中的驱动程序作为Scala应用程序运行时,它运行良好。但是当我创建一个带有依赖项的
jar,并试图通过
spark submit

spark-submit --class package.signature.Driver --master local[*] /path/to/my/jar-with-dependencies.jar
我得到以下例外

线程“main”java.lang.NoSuchMethodError中出现异常: SSLConnectionSocketFactory.(Ljavax/net/ssl/SSLContext;[Ljava/lang/String;[Ljava/lang/String;Ljavax/net/ssl/HostnameVerifier;)V 在 com.gargoylesoftware.htmlunit.httpclient.HtmlUnitSSLConnectionSocketFactory.(HtmlUnitSSLConnectionSocketFactory.java:125) 在 com.gargoylesoftware.htmlunit.httpclient.HtmlUnitSSLConnectionSocketFactory.buildsslssocketfactory(HtmlUnitSSLConnectionSocketFactory.java:112) 在 com.gargoylesoftware.htmlunit.HttpWebConnection.configureHttpsScheme(HttpWebConnection.java:597) 在 com.gargoylesoftware.htmlunit.HttpWebConnection.createHttpClient(HttpWebConnection.java:532) 在 com.gargoylesoftware.htmlunit.HttpWebConnection.getHttpClientBuilder(HttpWebConnection.java:494) 在 com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:158) 在 com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1321) 在 com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1238) 在 com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:346) 在 com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:415) 在 org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:541) 在 org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:530)

此异常的来源是代码中的
。getPageSource

import org.openqa.selenium.htmlunit.HtmlUnitDriver
import java.util.concurrent.TimeUnit
import scala.concurrent.duration._
import org.apache.spark.Logging

object Selenium extends Logging {
  val driver = new HtmlUnitDriver(false)
  val implicitWaitTimeout = 30 // seconds
  driver.manage.timeouts.implicitlyWait(implicitWaitTimeout, TimeUnit.SECONDS)
  def getPageSource(urlPage: String): String = {
    driver.get(urlPage)
    driver.getPageSource
  }
}
到目前为止我都试过了。
试图排除多个版本的
apache httpcomponent
。但这不起作用。

从异常中,似乎selenium htmlunit驱动程序(从异常中查看
com.gargoylesoftware.htmlunit
得出的结论)找不到org.apache.httpcomponents.httpclient v.4.4或更高版本的(从查找哪个包中得出结论;更具体地说,它需要这个库的版本4.4或更高版本,因为它找不到的方法是在版本4.4中引入的,请参阅)。此外,如果您查看selenium htmlunit驱动程序的版本,它看起来像是在使用版本4.5.1。因此,请将以下内容包括在您的依赖项中:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.1</version>
</dependency>

org.apache.httpcomponents
httpclient
4.5.1

因此,它将这个库与您的JAR打包在一起。当然,还要确保在同一个文件夹中没有另一个
httpclient-x.x.JAR

这是一个可传递的依赖性问题,这意味着您有JAR,其中每个JAR都有该类的版本,其中该方法不存在,默认情况下maven加载该类首先,你可以按Ctrl+Shift+T来检查这个类,你可以看到这个类的多个版本,一旦你在
pom.xml
中找到了这个
.jar
中没有这个方法的类,它包含了这个文件的写排除功能。

我尝试了你上面提到的解决方案。它不起作用。我们就这样做了重新包含多个httpclient。我尝试在pom依赖项中使用
excludes
排除所有其他
httpclient
版本。这也不起作用。在项目中的Eclipse中,按
Ctrl+Shift+t
where?,例如,要搜索某个文件,我们使用Ctrl+Shift+R,同样使用Ctrl+Shift+t搜索所有源文件rs