我有一个包含很多hadoop依赖项和org.json依赖项的项目。 我想只将org.json依赖包装到jar中,因为打包hadoop依赖项会导致冲突。我正在使用Packaging = Jar,并且使用胖罐不适合我的情况。有没有办法只打包org.json依赖项?我的pom.xml依赖项部分:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- JSON Parser dependency -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
<!-- Log4J dependency -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
</dependencies>
答案 0 :(得分:0)
回答我自己的问题,也许这就是ThorbjørnRavnAndersen的意思: 对于所有依赖项我不想被打包添加提供。例如:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>2.0.0-mr1-cdh4.0.1</version>
<scope>provided</scope>
</dependency>
并将其打包为胖罐:
<!-- Maven Assembly Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- MainClass in mainfest make a executable jar -->
<archive>
<manifest>
<mainClass>com.myorg.MyAppMain</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
修改强> 通过添加,如果运行时依赖项也从类路径中排除,那么项目就无法在我的IDE上运行。
答案 1 :(得分:0)
你可以使用maven-shade-plugin并详细说明什么是什么,什么不是什么。如果你不想,你不必在使用阴影时重命名。