我的项目取决于以下2个依赖项。
<dependency>
<groupId>com.myorg.projectA</groupId>
<artifactId>projectA</artifactId>
<version>0.0.1-RELEASE</version>
</dependency>
<dependency>
<groupId>com.myorg.projectB</groupId>
<artifactId>projectB</artifactId>
<version>0.0.1-RELEASE</version>
</dependency>
这两个依赖项都依赖于morphia
的不同版本。当我构建我的项目时,只选择了1个版本的morphia。我需要morphia
个版本。
以下是我根据this解决方案添加的内容,但这似乎无效。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptor>src/assembly/dep.xml</descriptor>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.mongodb.morphia</groupId>
<artifactId>morphia</artifactId>
<classifier>server</classifier>
<version>1.3.2</version>
<type>jar</type>
</artifactItem>
<artifactItem>
<groupId>org.mongodb.morphia</groupId>
<artifactId>morphia</artifactId>
<classifier>server</classifier>
<version>0.110</version>
<type>jar</type>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/dependency/</outputDirectory>
</configuration>
</execution>
我的汇编文件dep.xml
<?xml version='1.0' encoding='UTF-8'?>
<assembly>
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<dependencySets>
<dependencySet>
<scope>runtime</scope>
<unpack>true</unpack>
<unpackOptions>
<excludes>
<exclude>**/LICENSE*</exclude>
<exclude>**/README*</exclude>
</excludes>
</unpackOptions>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.directory}/dependency</directory>
<outputDirectory>/dependency</outputDirectory>
<filtered>false</filtered>
<includes>
<include>*.jar</include>
</includes>
<fileMode>0600</fileMode>
</fileSet>
</fileSets>
我没有看到morphia的版本被下载或被复制到我的dependency
文件夹中。
答案 0 :(得分:0)
由于传递依赖性,Maven经常会找到不同版本的工件。在这种情况下,Maven只会选择它遇到的第一件神器。
如果你真的想最终得到两个版本的工件,你可以使用像maven-build-helper-plugin这样的插件。但最有可能你不会得到你想要的东西。要在运行时使用两个不同版本的jar,您必须处理类加载器,这可能很难实现。如果你真的想沿着这条路走下去,我建议你看看osgi和其中一个像Felix这样的实现。