4

我有以下结构:

main/
  --pom.xml
  --common/
      --pom.xml
  --core/
      --pom.xml

common 和 core 都是主项目的模块,所以 main/pom.xml 是这样的:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>main</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Main APP</name>
  <url>http://maven.apache.org</url>
  <modules>
      <module>common</module>
      <module>core</module>
  </modules>
</project>

除此之外,common/pom.xml 应该包含所有未来模块之间的一些公共依赖关系。这是 common/pom.xml 现在的样子:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.app</groupId>
    <artifactId>common</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>mod1</name>
    <url>http://maven.apache.org</url>


    <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>main</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>common-dependency</groupId>
                <artifactId>common</artifactId>
                <version>3.8.1</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

最后,模块核心应该使用公共模块中定义的依赖关系,所以这是我在 core/pom.xml 中所做的:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.app</groupId>
    <artifactId>core</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>Core</name>
    <url>http://maven.apache.org</url>

    <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>main</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.mycompany.app</groupId>
                <artifactId>common</artifactId>
                <version>1.0-SNAPSHOT</version>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

我想要的是,当我mvn dependency:copy-dependencies在核心模块中运行时,maven 也应该从 common 模块中复制所有依赖项(例如 common-dependency:common)。但实际上发生的是它没有复制任何依赖关系,所以就像核心模块根本没有任何依赖关系一样。

我在这里想念什么?

4

1 回答 1

1

Scope 'import' is for dependencyManagement, that only gives you the versions and default scopes of modules, when you actually use them.

If you want to get the dependencies, you don't need to wrap them in dependencyManagement, and just use transitive dependency mechanism.

So common/pom.xml should be

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.app</groupId>
    <artifactId>common</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>mod1</name>
    <url>http://maven.apache.org</url>


    <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>main</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

        <dependencies>
            <dependency>
                <groupId>common-dependency</groupId>
                <artifactId>common</artifactId>
                <version>3.8.1</version>
            </dependency>
        </dependencies>
</project>

And core/pom.xml should be

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.app</groupId>
    <artifactId>core</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>Core</name>
    <url>http://maven.apache.org</url>

    <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>main</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

        <dependencies>
            <dependency>
                <groupId>com.mycompany.app</groupId>
                <artifactId>common</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>

</project>
于 2013-09-06T14:53:54.870 回答