我将一个Spark项目打包到一个只有一个jar文件中但是当我用maven编译时它包含了很多jar(100mb,太多大小!!)但不是org / log4j / *依赖项(它在执行时会产生错误)时间),但它将其他人添加为jar中的jboss / netty / *。
我认为所有依赖项都是相互包含的,我必须假设那些100 mb?但是它不包含依赖项org / log4j / *
¿有没有办法只将我指定的10个罐子包含在我的maven xml文件中? :
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>com.databricks</groupId>
<artifactId>spark-csv_2.10</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
创建'jar-with-dependencies'我使用这个插件:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${targetdirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
由于
答案 0 :(得分:0)
有一个依赖关系树,即你所有的依赖关系都在引入它们自己的依赖关系等等。
显示您的树使用
mvn dependency:tree
请参阅https://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html
答案 1 :(得分:0)
首先,我们为依赖项提取的许多库将调用他们自己依赖的其他库。有时,这可能会让所有相互冲突的事情变得非常有效。
使用依赖关系树来查看哪些冲突以及哪个库带来了什么。
mvn dependency:tree -Dverbose
详细信息为您提供了更多信息。如果您正在寻找冲突,请使用:
mvn dependency:tree -Dverbose | grep 'omitted for conflict'
找到要排除的内容后,请检查Dependency Exclusions:
[进入依赖关系标签]
<exclusions>
<exclusion> <!-- declare the exclusion here -->
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
</exclusion>
</exclusions>
答案 2 :(得分:0)
如果您真的只想包含在pom中明确列出的依赖项,则可以对所有依赖项使用* -exclusions的概念。
中对此进行了解释https://stackoverflow.com/a/7556707/927493
请注意,您的程序可能无法再编译。更有可能是&#34; ClassNotFound&#34;运行时的异常,因为您的某个依赖项尝试从其中一个依赖项调用方法,但您排除了所有传递依赖项。