Maven - 未在Artifactory上部署的工件解决传递依赖关系

时间:2017-05-16 10:59:51

标签: java eclipse maven artifactory transitive-dependency

我有两个项目--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

1 个答案:

答案 0 :(得分:3)

要成功解决传递依赖关系,必须可以在Maven存储库中访问项目B的jar和pom.xml。将工件部署到远程存储库时,请确保已部署jar和pom.xml并可供下载。

将必需的文件部署到远程存储库,使用命令行构建项目A.指定构建Maven目标以触发将所有依赖项下载到本地Maven存储库。像mvn compilemvn package之类的东西会触发下载并成功构建项目A.

一次,项目B的jar和pom.xml位于本地Maven存储库中,更新Eclipse中的Maven项目,他们将正确地重建和解析依赖项。