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

12
我有两个项目——A和B,其中A依赖于B。我将B打包成jar文件并在Maven服务器(Artifactory)上部署它,然后在pom文件中将该jar文件作为常规依赖项包含在项目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快速启动原型。 我的项目结构(打包为jar)如下:

project-name
  src/main/java
  src/test/java
  pom.xml

1
你的 POM 文件可以帮助我们了解问题。 - davidxxx
@davidxxx 更新了pom文件,目前它们非常简单。 - Anmol Gupta
@Shinchan 当我在Eclipse中运行一个junit测试时,我遇到了异常。当我关闭工作区中的项目B时,Artifactory确实引用了该项目B。但是,一旦我在工作区中打开项目B,它就会开始从工作区自身进行引用。 - Anmol Gupta
哦,第一个pom文件缺少groupId。 - davidxxx
1
那就是问题所在。使用 mvn deploy:deploy 命令进行部署。查阅 Maven 文档以了解如何执行此命令。 - Shailesh Pratapwar
显示剩余7条评论
1个回答

8
为成功解决传递性依赖,项目B的jar和pom.xml必须在Maven仓库中可访问。在将构件部署到远程仓库时,请确保已部署jar和pom.xml并可供下载。
将所需文件部署到远程仓库后,使用命令行构建项目A。指定Maven build目标以触发所有依赖项下载到本地Maven仓库中。类似于mvn compilemvn package的命令将触发下载并成功构建项目A。
一旦项目B的jar和pom.xml在本地Maven仓库中,更新Eclipse中的Maven项目,它们将正确重建和解析依赖项。

谢谢Brent!我正在部署pom作为打包的jar的一部分,这个jar本身作为maven仓库(服务器)的一部分是可以访问的。我需要考虑其他类型的打包吗? - Anmol Gupta
@AnmolGupta 根据您的输入,我更新了我的答案,使其更加简洁明了,以适应您的项目。 - Brent Worden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接