我想设置一个多模块家项目,并且该模块间的依赖关系显然没有设立正确。

我有:

<modules>
  <module>commons</module>
  <module>storage</module>
</modules>

在父POM(其中有一个包装类型pom) 然后子目录 commons/storage/ 其定义罐pom用相同的名称。

存取决于共同利益。

在主要(master)目录,我跑 mvn dependency:tree 并参见:

[INFO] Building system
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] domain:system:pom:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:3.8.1:test
[INFO] ------------------------------------------------------------------------
[INFO] Building commons
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
...correct tree...
[INFO] ------------------------------------------------------------------------
[INFO] Building storage
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
Downloading: http://my.repo/artifactory/repo/domain/commons/1.0-SNAPSHOT/commons-1.0-SNAPSHOT.jar
[INFO] Unable to find resource 'domain:commons:jar:1.0-SNAPSHOT' in repository my.repo (http://my.repo/artifactory/repo)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Missing:
----------
1) domain:commons:jar:1.0-SNAPSHOT

为什么不依赖于"共有"失败了,即使反应器已经明显看到它,因为它成功地处理其依赖的树吗?它绝对不应该去的净找到它,因为它就在那里...

Pom,对存储:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <packaging>jar</packaging>
  <parent>
    <artifactId>system</artifactId>
    <groupId>domain</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>domain</groupId>
  <artifactId>storage</artifactId>
  <name>storage</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!-- module dependencies -->
    <dependency>
      <groupId>domain</groupId>
      <artifactId>commons</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

    <!-- other dependencies -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

谢谢你的任何建议。

(编辑)

为了澄清,什么我在这里找的是这个:我不想需要安装模块的X建立模块Y这取决于X,鉴于这两个模块所引用的来自同一个父POM。这使得直观的感到,如果我有两件事在同一来源的树,我不需要安装的中间产品继续在建立。我希望我的思维使得一些感觉在这里...

有帮助吗?

解决方案

我觉得问题是,当你指定的依赖Maven认为把它作为罐子(或其他)从至少一个本地回购包装和使用。我敢肯定,如果你对你的公共项目运行mvn install第一一切都将正常工作。

其他提示

此行家邮件列表螺纹讨论,依赖:本身树的目标会看东西的仓库,而不是反应器。您可以解决此通过MVN安装,如先前建议,或者少做繁重的东西,调用器,如

mvn compile dependency:tree

我的作品。

意识到这是一个较旧的线程,但似乎无论是工具演变或者这可能已经错过了第一次左右。

,能够执行构建,使得依存关系解决,而通过这样做的反应器中生成安装。

如果您在描述你的项目,然后你的模块之间的依赖将构建自身通过内部Maven的反应器中得到解决的模块结构父开始你的构建。

当然,这不是因为它没有解决结构内单个个体模块的生成的理想解决方案。在这种情况下Maven会不会在他的反应器的依赖,将蜂寻找解决它在库中。因此,对于个人建立你还是先安装的依赖关系。

下面是一些参考描述这种情况。

对于我来说,这导致了我这个线程是一个类似的问题和解决方案以确保所有模块依赖POM的有

 <packaging>pom</packaging>

父有

POM

我的模型出发了POM - 所以没有被发现罐子

这workd对我的唯一的事:切换到摇篮:(

Parent
  +---dep1
  +---war1 (using dep1)

和我能在WAR1只是CD和使用MVN tomcat7:运行战争。 我一直有之前安装的整个项目,尽管WAR1引用他的父母和家长参考WAR1和DEP1(如模块),这样所有的依赖应该是已知的。

我不明白是什么问题。

在一个Maven模块结构是这样的:

- parent
  - child1
  - child2

您将在parent pom这样的:

<modules>
  <module>child1</module>
  <module>child2</module>
</modules>

如果您现在就要靠child1child2通过将遵循在<dependencies>child2

<dependency>
  <groupId>example</groupId>
  <artifactId>child1</artifactId>
</dependency>

您将收到用于child1的JAR无法找到错误。这可以通过声明一个<dependencyManagement>块包括在child1pom parent解决:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>example</groupId>
      <artifactId>child1</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>

child1现在,当你在运行一个compilepackageparent目标构建和child2会发现child1的编译后的文件。

Bonusing掉 答案别斯*威利斯:

如果你的生成创建试验罐分享试验码在你的反应堆子你应该使用:

mvn test-compile dependency:tree

这将允许 dependency:tree 要运行,以完成在这种情况。

通过在模块的POM文件的配置确保其未能在POM得到解决模块,被指向正确的母体。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top