我有两个项目--A和B,其中A依赖于B.我将B打包为jar并将其部署在maven服务器(artifactory)上,然后将该jar包含为pom文件中项目A的正常依赖项。 B的jar文件显示在项目A的Maven依赖项中,但项目B的依赖项未显示在依赖项层次结构中。它导致B的依赖性找不到类的异常。
然而,我的项目A和B以及同一个eclipse工作区。当我打开项目B时,项目A开始从工作区而不是远程存储库引用项目B,一切运行良好。
这个问题 - Maven. Transitive dependencies最接近我的问题,但我的项目B的依赖关系不是可选的。
这里出了什么问题?
项目B的POM
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myapp</groupId>
<artifactId>utils</artifactId>
<version>1.0.0-RELEASE</version>
<packaging>jar</packaging>
<name>utils</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- Following doesn't get added to project A -->
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
</project>
项目A的POM
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myapp</groupId>
<artifactId>core-app</artifactId>
<version>1.0.0-RELEASE</version>
<packaging>jar</packaging>
<name>core-app</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.myapp</groupId>
<artifactId>utils</artifactId>
<version>1.0.0-RELEASE</version>
</dependency>
</dependencies>
</project>
我正在使用maven quickstart原型。我的项目的项目结构是(我打包为jar):
project-name
src/main/java
src/test/java
pom.xml
答案 0 :(得分:3)
要成功解决传递依赖关系,必须可以在Maven存储库中访问项目B的jar和pom.xml。将工件部署到远程存储库时,请确保已部署jar和pom.xml并可供下载。
将必需的文件部署到远程存储库,使用命令行构建项目A.指定构建Maven目标以触发将所有依赖项下载到本地Maven存储库。像mvn compile
或mvn package
之类的东西会触发下载并成功构建项目A.
一次,项目B的jar和pom.xml位于本地Maven存储库中,更新Eclipse中的Maven项目,他们将正确地重建和解析依赖项。