【问题标题】:'Go to definition' in a multi-module maven project with module dependencies in IntelliJ在 IntelliJ 中具有模块依赖关系的多模块 maven 项目中的“转到定义”
【发布时间】:2014-12-03 15:14:02
【问题描述】:

我有一个带有两个子模块(module1module2)的父模块

module2 具有对 module1 的 maven 依赖项

module2 中,我引用了module1 中的一个类

当我尝试跳转到此类的定义时,IntelliJ 在我的 maven 存储库中打开 .class 文件。我希望它跳转到module1 中的java 类。如何让 IntelliJ 跳转这个类文件?

我正在运行 IntelliJ IDEA Ultimate 14.0.1

parentpom:

<?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>

    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>module2</module>
        <module>module1</module>
    </modules>
</project>

module1pom:

<?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">
    <parent>
        <artifactId>test</artifactId>
        <groupId>test</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>module1</artifactId>
</project>

module2pom:

<?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">
    <parent>
        <artifactId>test</artifactId>
        <groupId>test</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>module2</artifactId>

    <dependencies>
        <dependency>
            <groupId>test</groupId>
            <artifactId>module1</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

【问题讨论】:

  • 请向我们展示你的 pom 文件,全部三个
  • 我已将 pom 文件添加到问题中
  • 好的,你的 pom 看起来是正确的,所以 Idea 应该能够使用它并让你在模块中的类之间直接导航。你是如何打开项目的?最好在所有项目关闭的情况下开始idea,配置maven,然后使用file/open 导入主pom。然后,转到模块 2 中引用模块 1 中的类的类,并尝试导航(按住 ctrl 单击)类名。
  • 还有,您的 java 是否在标准 maven 目录结构中:src/main/java/...
  • 我已经尝试再次重现该问题,但我再也无法重现了。上周我一直在摆弄 IntelliJ 中的 maven 设置,显然我已经解决了这个问题。我现在可以正常 CTRL+单击。感谢您对工程师 Dollery 的所有帮助 :)

标签: maven intellij-idea intellij-14


【解决方案1】:

另一个答案over here at stackoverflow 帮助了我。如果它们还没有到位,您基本上必须添加模块依赖项。

【讨论】:

    【解决方案2】:

    你有两个选择:

    方式#1:

    使用源代码构建 module1。这种方式可确保您始终拥有与使用的 java 类一致的源代码。

    要启用使用源构建,请将其添加到 maven 插件:

             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.1.2</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    

    方式#2:

    通过Project structuremodule1添加到module2 > Modules > Dependencies > + > 3. Module dependency

    嗯,它不会像 #1 那样一致,但如果您使用的是 maven 构建,它的设置速度要快得多。如果您使用的是 intellij idea build,您可以将此依赖项标记为 export 以将其包含在您的 module1 输出目录中。

    【讨论】:

    • 这些都不是必需的,甚至不一定是一个好主意。如果您的 maven 依赖项是正确的,并且您已经从主 pom 导入了项目,那么导航应该“正常”工作。
    • 我同意工程师 Dollery 的观点。我之前尝试过方法#2,一旦你重新导入你的 maven 项目,你必须再次设置依赖项。方式 #1 只会将我带到我的 Maven 存储库中的源代码,而不是我的项目中的源代码。
    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2015-06-25
    • 1970-01-01
    • 2013-06-15
    相关资源
    最近更新 更多