[英]mvn package elasticsearch-spark error
我有一个Maven项目想要使用es-spark 从elasticsearch读取 ,我的pom.xml
就像这样:
<groupId>com.jzdata.logv</groupId>
<artifactId>es-spark</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>es-spark</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-spark_2.11</artifactId>
<version>2.1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>my.main.class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我的依赖是根据elasticsearch-spark install 。
我想将可运行的JAR
文件与依赖项jar文件打包在一起。
我在其中运行cmd mvn package
,它显示找不到 org.apache.spark
包, org.apache.spark.api.java
包,但是这些包在我的maven依赖项中。
我的错误步骤在哪里?
该库旨在在Spark应用程序中使用,它假定Spark依赖项在加载时将可用。
*同样,您希望运行应用程序时可以使用Spark依赖项:RDD / DataFrames / SparkContext都是Spark的一部分。 (*请参阅下面的我的评论)
问题是您尚未向编译器指示此问题,而是认为您正在使用在执行期间不可用的库。 这样考虑-构建失败,因为编译器认为您的应用程序无法运行。
要解决该问题,您必须告诉编译器您希望在执行过程中可以使用Spark库:
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>1.6.0</version> <scope>provided</scope> </dependency>
* 重要 * 您需要从工件中排除Spark库 ,否则您可能会在类路径中最终获得一个以上版本的Spark(无论如何,它们都没有理由包含它们,因为Spark正在加载您的应用程序!)。 将范围设置为提供可以告诉编译器您期望Spark可用,并且应该从输出中排除它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.