简体   繁体   English

mavenidea插件无法解析本地依赖

[英]maven idea plugin unable to resolve local dependency

I have created a Maven (Java) project with three Maven subprojects, module1-3.我创建了一个 Maven (Java) 项目,其中包含三个 Maven 子项目模块 1-3。 module2 depends on module1, and module3 depends on both module2 and module1. module2 依赖于 module1,module3 依赖于 module2 和 module1。

In the original build, module1 and module2 are common modules shared between multiple projects, and module3 is the end program which incorporates the other two.在原始构建中,module1和module2是多个项目共享的公共模块,module3是合并其他两个的最终程序。 All the modules are ultimately compiled into an uber-jar to be distributed to the end customer.所有模块最终都编译成一个 uber-jar 分发给最终客户。

From the command line this builds and runs just fine, but after importing to IntelliJ it's not able to properly resolve the local dependencies.从命令行构建并运行得很好,但是在导入 IntelliJ 后,它无法正确解析本地依赖项。 It appears that IntelliJ uses the idea:idea goal for its importing, and running idea:idea on my testcase gives the following output, where it clearly has problems resolving despite ultimately giving a build success.似乎 IntelliJ 使用 idea:idea 目标来导入和运行 idea:idea 在我的测试用例上给出了以下 output,尽管最终构建成功,但它显然有问题解决。

After importing the project into IntelliJ, all of the cross module references show as unresolved symbols.将项目导入 IntelliJ 后,所有跨模块引用都显示为未解析的符号。

Complete source code for this testcase is at: https://github.com/hutch31/maven-intellij-plugin-dep此测试用例的完整源代码位于: https://github.com/hutch31/maven-intellij-plugin-dep

Is there a missing/extra step required to get IntelliJ to figure out these references across Maven subprojects?要让 IntelliJ 找出 Maven 子项目中的这些引用,是否需要缺少/额外的步骤?

I am using Maven 3.6.3, and IntelliJ 2021.1.我正在使用 Maven 3.6.3 和 IntelliJ 2021.1。 IntelliJ's integrated Maven is also version 3.6.3. IntelliJ 的集成 Maven 也是 3.6.3 版本。

Edit: I have tried changing the order of the modules in the parent, and adding parent tags to the child modules, which did not affect the operation.编辑:我试过改变父模块的顺序,给子模块添加父标签,不影响操作。 I have updated the repository to reflect the state of the original code, in which module3 has a parent tag but module1 and module2 do not (as they are common code).我更新了存储库以反映原始代码的 state,其中 module3 具有父标签,但 module1 和 module2 没有(因为它们是通用代码)。

On the command line, I build and run using 'mvn clean test'.在命令行上,我使用“mvn clean test”构建和运行。 I have also added a Maven 'compile' configuration, which builds correctly despite the reported errors.我还添加了 Maven 'compile' 配置,尽管报告了错误,但它仍然可以正确构建。

$ mvn idea:idea
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] mod1                                                               [jar]
[INFO] mod2                                                               [jar]
[INFO] mod3                                                               [jar]
[INFO] Cable Test Studio                                                  [pom]
[INFO]
[INFO] -------------------------< org.ghutchis:mod1 >--------------------------
[INFO] Building mod1 1.0-SNAPSHOT                                         [1/4]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> maven-idea-plugin:2.2.1:idea (default-cli) > generate-resources @ mod1 >>>
[INFO]
[INFO] <<< maven-idea-plugin:2.2.1:idea (default-cli) < generate-resources @ mod1 <<<
[INFO]
[INFO]
[INFO] --- maven-idea-plugin:2.2.1:idea (default-cli) @ mod1 ---
[INFO]
[INFO] -------------------------< org.ghutchis:mod2 >--------------------------
[INFO] Building mod2 1.0-SNAPSHOT                                         [2/4]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> maven-idea-plugin:2.2.1:idea (default-cli) > generate-resources @ mod2 >>>
[INFO]
[INFO] <<< maven-idea-plugin:2.2.1:idea (default-cli) < generate-resources @ mod2 <<<
[INFO]
[INFO]
[INFO] --- maven-idea-plugin:2.2.1:idea (default-cli) @ mod2 ---
[WARNING] An error occurred during dependency resolution of the following artifact:

    org.ghutchis:mod21.0-SNAPSHOT

Caused by: Missing:
----------
1) org.ghutchis:mod1:jar:1.0-SNAPSHOT

  Try downloading the file manually from the project website.

  Then, install it using the command:
      mvn install:install-file -DgroupId=org.ghutchis -DartifactId=mod1 -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there:
      mvn deploy:deploy-file -DgroupId=org.ghutchis -DartifactId=mod1 -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

  Path to dependency:
        1) org.ghutchis:mod2:jar:1.0-SNAPSHOT
        2) org.ghutchis:mod1:jar:1.0-SNAPSHOT

----------
1 required artifact is missing.

for artifact:
  org.ghutchis:mod2:jar:1.0-SNAPSHOT

from the specified remote repositories:
  central (https://repo.maven.apache.org/maven2, releases=true, snapshots=false)

[INFO]
[INFO] -------------------------< org.ghutchis:mod3 >--------------------------
[INFO] Building mod3 1.0-SNAPSHOT                                         [3/4]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> maven-idea-plugin:2.2.1:idea (default-cli) > generate-resources @ mod3 >>>
[INFO]
[INFO] <<< maven-idea-plugin:2.2.1:idea (default-cli) < generate-resources @ mod3 <<<
[INFO]
[INFO]
[INFO] --- maven-idea-plugin:2.2.1:idea (default-cli) @ mod3 ---
[WARNING] An error occurred during dependency resolution of the following artifact:

    org.ghutchis:mod31.0-SNAPSHOT

Caused by: Missing:
----------
1) org.ghutchis:mod2:jar:1.0-SNAPSHOT

  Try downloading the file manually from the project website.

  Then, install it using the command:
      mvn install:install-file -DgroupId=org.ghutchis -DartifactId=mod2 -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there:
      mvn deploy:deploy-file -DgroupId=org.ghutchis -DartifactId=mod2 -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

  Path to dependency:
        1) org.ghutchis:mod3:jar:1.0-SNAPSHOT
        2) org.ghutchis:mod2:jar:1.0-SNAPSHOT

2) org.ghutchis:mod1:jar:1.0-SNAPSHOT

  Try downloading the file manually from the project website.

  Then, install it using the command:
      mvn install:install-file -DgroupId=org.ghutchis -DartifactId=mod1 -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there:
      mvn deploy:deploy-file -DgroupId=org.ghutchis -DartifactId=mod1 -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

  Path to dependency:
        1) org.ghutchis:mod3:jar:1.0-SNAPSHOT
        2) org.ghutchis:mod1:jar:1.0-SNAPSHOT

----------
2 required artifacts are missing.

for artifact:
  org.ghutchis:mod3:jar:1.0-SNAPSHOT

from the specified remote repositories:
  central (https://repo.maven.apache.org/maven2, releases=true, snapshots=false)

[INFO]
[INFO] ------------------------< org.ghutchis:parent >-------------------------
[INFO] Building Cable Test Studio 1.0-SNAPSHOT                            [4/4]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-idea-plugin:2.2.1:idea (default-cli) > generate-resources @ parent >>>
[INFO]
[INFO] <<< maven-idea-plugin:2.2.1:idea (default-cli) < generate-resources @ parent <<<
[INFO]
[INFO]
[INFO] --- maven-idea-plugin:2.2.1:idea (default-cli) @ parent ---
[INFO] jdkName is not set, using [java version1.8.0_265] as default.
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for Cable Test Studio 1.0-SNAPSHOT:
[INFO]
[INFO] mod1 ............................................... SUCCESS [  0.231 s]
[INFO] mod2 ............................................... SUCCESS [  0.021 s]
[INFO] mod3 ............................................... SUCCESS [  0.021 s]
[INFO] Cable Test Studio .................................. SUCCESS [  0.087 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.750 s
[INFO] Finished at: 2021-04-20T10:28:53+01:00
[INFO] ------------------------------------------------------------------------

The maven idea plugin is long deprecated: maven 想法插件早已被弃用:

https://maven.apache.org/plugins/maven-idea-plugin/ https://maven.apache.org/plugins/maven-idea-plugin/

Avoid using it.避免使用它。

I believe I have figured out what the issue was in the testcase, which is that the package specification for mod1/mod2/mod3 did not match the file path.我相信我已经弄清楚了测试用例中的问题,即 mod1/mod2/mod3 的 package 规范与文件路径不匹配。 Moving the files from src/main/java/org/ghutchis/module1.java to src/main/java/org/ghutchis/mod1/module1.java fixed IntelliJ's build issue for the test case (though, sadly, not the original problem).将文件从 src/main/java/org/ghutchis/module1.java 移动到 src/main/java/org/ghutchis/mod1/module1.java 修复了 IntelliJ 的测试用例的构建问题(遗憾的是,不是)。

The updated Java code has been pushed to Github for examination.更新后的 Java 代码已推送至 Github 进行检查。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM