在我们的java项目中,我们使用的是HBase 1.1.1 java API。该库内部需要使用Guava 15.0(早期版本的HBase,前0.98,使用Guava 18.0)。我们当前的代码库有一个父项目和多个子项目。一些子项目需要仅在Guava 18.0中提供的方法。是否可以在我们的代码库中配置父项目的pom.xml,让HBase使用Guava 15.0,同时让整个剩余的代码库使用Guava 18.0?
我尝试过阴影,如下所示: 父pom(example-parent)
<modules>
<module>../example-child1</module>
<module>../example-child2</module>
.......
</modules>
child pom(example-child1)
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<profiles>
<profile>
<id>child1</id>
<build>
<plugins>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>make-assembly-shade</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<pattern>com.google.guava</pattern>
<shadedPattern>shaded.com.google.guava</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
我使用以下方法构建了jar:
mvn clean compile package -Pchild1
但是我仍然在最后一个罐子里只看到一个版本的番石榴。还有其他方法可以做同样的事吗?
答案 0 :(得分:0)
我强烈建议根据个人资料定义这种'特殊'番石榴依赖性。例如,如果Child1需要Guava 15,则在相关的配置文件中添加具有此特定的依赖项部分。如果您想保持简单,可以将其从父项中删除,然后决定每个配置文件(和模块组)包含哪个版本。