19

我用谷歌搜索了这个,似乎没有人有答案,但它似乎是一件很简单的事情,应该是可能的。

我有以下项目结构:

parent
   ---sub-project1
   ---sub-project2

sub-project2 需要有 sub-project1 作为依赖项。

所以我在子项目2的pom中有这个:

 <dependencies>
    <dependency>
         <artifactId>sub-project1</artifactId>
        <groupId>mygroup</groupId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

……

当我这样做时,Maven 会尝试下载 sub-project1.jar 文件,该文件不存在,因为它还没有为 repo 做好准备。

我试图将 a<scope>import</scope>放入依赖项中,但这也不起作用——结果相同。

那么在构建 sub-project2 时,我该怎么做才能让 Maven 查看 sub-project1 呢?

编辑这里有一些 pom 片段:

家长:

<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>
   <prerequisites>
      <maven>2.0.9</maven>
   </prerequisites>
   <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>
   </modules>
 ....

子项目1:

<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/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>sub-project1</artifactId>
....

子项目2:

<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/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

   <artifactId>sub-project1</artifactId>

    <dependencies>
     ....
       <dependency>
          <artifactId>sub-project2</artifactId>
          <groupId>mygroup</groupId>
          <version>1.0-SNAPSHOT</version>
          <scope>import</scope>
      </dependency>
  </dependencies>

我得到mvn clean install 父母时遇到的错误是:

[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure

有很多类/包未找到错误

4

2 回答 2

20

您应该有一个父级的主 pom,您将在其中列出项目的模块。

  <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>>
  </modules>

在每个子项目中,您必须参考您的父母:

<parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

就像你做的那样,你指定项目之间的依赖关系。我认为你错过了我描述的一些步骤。

编辑:您应该在父级别发布您的mvn clean install 。

于 2010-04-06T14:10:13.723 回答
10

当我这样做时,Maven 会尝试下载 sub-project1.jar 文件,该文件不存在,因为它还没有为 repo 做好准备。

这是正常行为,Maven 通过本地存储库解决依赖关系,因此您需要先installsub-project1。实际上,处理这种情况的常用方法是从父级启动反应堆构建(多模块构建)。

假设您在父级中聚合模块,即您在“父级”中声明了类似的内容pom.xml

<modules>
  <module>sub-project1</module>
  <module>sub-project2</module>>
</modules>

只需cd进入父目录并启动反应堆构建:

$ cd parent
$ mvn install

然后,Maven 将计算构建顺序(从由模块及其依赖项组成的有向图中扣除)并按计算顺序install 在所有模块上运行(首先是父级,然后是子项目 1,最后是子项目 2,对于您的特定示例)。

但是不要使用type的范围import,你在这里误用了它。去掉它。

更新:在我回答时问题已更新,显示的 POM 并未说明原始问题中给出的情况(反向依赖,工件 id 中可能存在错误)。但建议的方法仍然适用。删除<scope>import</scope>on 依赖项并从父级启动反应器构建。

于 2010-04-06T14:42:56.093 回答