当我的项目中使用的项目和jar没有使用相同的版本时,我遇到了问题。
下面是我项目中的pom.xml:
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-core</artifactId>
<version>1.6.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.another.project.server</groupId>
<artifactId>exampleserver</artifactId>
<version>1.0</version>
<type>jar</type>
<scope>test</scope>
</dependency>
我的exampleserver jar使用的是sshd-core版本0.14.0,但我的项目是使用sshd-core版本1.6.0。所以它会失败,因为sshd-core 0.14.0和sshd-core 1.6.0版本的所有实现都不同。
无论如何都要为exampleserver准确指定sshd版本吗?任何帮助将不胜感激。
答案 0 :(得分:1)
不幸的是,在编译/运行项目时,您只能拥有给定jar的一个版本。因此,您需要确定哪个版本的sshd-core version
适用于项目中的所有用途(包括传递版本)。
如果您发现版本x.y.z
非常适合您的项目和exampleserver
,则可以通过<dependencyManagement>
进行设置。如果此版本恰好是1.6.0
,您还可以使用其他答案中描述的排除机制。
如果找不到适合所有用途的版本,您将会遇到困难。您可以尝试类着色,或者需要重写代码。
答案 1 :(得分:0)
exampleserver的sshd版本在exampleserver的POM中定义。如果这不是您的项目,则无法更改该版本。但是,你可以做的是从exampleserver中排除sshd依赖项,这样你的类路径上只有1.6.0版本。 E.g:
<dependency>
<groupId>com.another.project.server</groupId>
<artifactId>exampleserver</artifactId>
<version>1.0</version>
<type>jar</type>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-core</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 2 :(得分:0)
您可以使用排除。
由于maven 2.x可传递地解析依赖关系,因此可能会将不需要的依赖项包含在项目的类路径中。
(https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html):
在你的例子中
<dependency>
<groupId>com.another.project.server</groupId>
<artifactId>exampleserver</artifactId>
<version>1.0</version>
<type>jar</type>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-core</artifactId>
</exclusion>
</exclusions>
</dependency>