【问题标题】:Multi module Maven project- modules can't see each other多模块 Maven 项目-模块不能互相看到
【发布时间】:2017-11-26 18:38:21
【问题描述】:

我有一个简单的 Maven 项目,看起来像这样 project view

有一个主 pom.xml 如下所示:

    <?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>piche</artifactId>
    <name>PICHE project</name>
    <description>PICHE project</description>
    <groupId>com.pesho.piche</groupId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <properties>
        <cucumber.jvm.version>1.2.5</cucumber.jvm.version>
        <project.version>1.0</project.version>
        <runner.folder>".."</runner.folder>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.pesho.piche</groupId>
            <artifactId>test</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>com.pesho.piche</groupId>
            <artifactId>core</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.jvm.version}</version>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>${cucumber.jvm.version}</version>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-guice</artifactId>
            <version>${cucumber.jvm.version}</version>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-core</artifactId>
            <version>${cucumber.jvm.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.inject.extensions</groupId>
            <artifactId>guice-assistedinject</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>1.18</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>22.0</version>
        </dependency>
    </dependencies>
    </dependencyManagement>

    <modules>
        <module>core</module>
        <module>test</module>
    </modules>
</project>

有两个模块——核心和测试。 核心模块 pom.xml:

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>core</artifactId>
    <name>Core module</name>
    <description>Core Module</description>

    <parent>
        <groupId>com.pesho.piche</groupId>
        <artifactId>piche</artifactId>
        <version>1.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>22.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>3.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

测试模块 pom.xml

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>test</artifactId>
    <name>Test module</name>

    <url>http://maven.apache.org</url>

    <parent>
        <artifactId>piche</artifactId>
        <groupId>com.pesho.piche</groupId>
        <version>1.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.pesho.piche</groupId>
            <artifactId>core</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-guice</artifactId>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-core</artifactId>
    </dependency>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.inject.extensions</groupId>
            <artifactId>guice-assistedinject</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>
    </dependencies>

</project>

我想在测试中使用核心代码。依赖看起来是对的。项目构建没有错误:

[INFO] Reactor Summary:
[INFO] 
[INFO] PICHE project ..................................... SUCCESS [0.317s]
[INFO] Core module ....................................... SUCCESS [1.317s]
[INFO] Test module ....................................... SUCCESS [0.669s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.461s
[INFO] Finished at: Fri Jun 23 11:03:18 EEST 2017
[INFO] Final Memory: 17M/41M
[INFO] ------------------------------------------------------------------------

但是当我尝试在测试中从核心导入一个类时,找不到该类。

【问题讨论】:

  • 您确保您正在从核心项目访问公共类。
  • 你的依赖管理是正确的。尝试从命令行构建,如果可行,请在 intellij 的 maven 项目窗口中单击重新导入。

标签: java xml maven intellij-idea multi-module


【解决方案1】:

你必须像这样在你的测试模块pom中制作核心依赖的版本

<dependencies>
    <dependency>
        <groupId>com.pesho.piche</groupId>
        <artifactId>core</artifactId>
        <version>${parent.version}</version> <!-- TODO -->
    </dependency>

AND 删除父 POM 中的这些行

<dependencyManagement>
<dependencies>
    <dependency>
        <groupId>com.pesho.piche</groupId>
        <artifactId>test</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>com.pesho.piche</groupId>
        <artifactId>core</artifactId>
        <version>1.0</version>
    </dependency>

AND 来自您的父模块:

mvn clean install 

希望对你有帮助

【讨论】:

    【解决方案2】:

    实际上,父pom.xmlcoretest的依赖是不必要的。要访问核心中的 api,您只需在 pom 中定义依赖项并将其安装到本地存储库。
    core的根目录下运行mvn clean install,这将编译这个项目并打包并安装jar到maven本地仓库。然后依赖可以在另一个项目中遇到,您可以访问定义的api。
    但是core 中的任何更改都可能导致您将其重新安装到本地存储库。

    【讨论】:

      【解决方案3】:

      感谢您的所有回答。我注意到了这些建议。问题是我在模块中使用了默认包。永远不要那样做!依赖关系没问题,但由于类路径选项,我看不到它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-12
        • 2014-09-14
        • 2016-06-12
        • 2018-02-06
        • 1970-01-01
        • 2018-01-09
        • 2022-08-17
        • 2021-02-09
        相关资源
        最近更新 更多