执行一个特定的 Maven 插件,我很难找出它来自哪里,以删除或替换它,因为它的编译依赖项链接已损坏。我说的是
org.reflections:reflections-maven:0.9.8
,它依赖于 org.jfrog.jade.plugins.common:jade-plugin-common:1.3.8
,Maven 无法从中央存储库下载,因为链接重定向到 OpenMind 位置并导致 404(link)。
我不想在项目结构中包含这样的 JAR,而是想弄清楚反射-maven 插件的定义在哪里,因为该插件已停止使用(GitHub),但在构建过程中以某种方式执行(
mvn clean install
)。
[INFO] --- reflections-maven:0.9.5:reflections (default) @ my-module ---
[INFO] Reflections took 240 ms to scan 1 urls, producing 35 keys and 128 values
[INFO] Reflections successfully saved in C:\Dev\my-project\my-parent\my-module\target\classes\META-INF\reflections\my-module-reflections.xml using XmlSerializer
我还没有找到
reflections-maven
在任何多模块项目结构中定义或使用的位置。注意我使用 Maven 3.3.9
。我的尝试:
pom.xml
(该模块依赖于其他模块,但是,它们都在失败模块之前成功构建)。mvn dependency:tree -Dverbose
根本没有提到任何reflections-maven
或jade-plugin-common
。该命令生成超过 136k 行,因此需要将输出保存到文件中并执行全文搜索。据我从这个comment中了解到,我afras Maven 3是这里的限制。depgraph-maven-plugin
给了我同样的负面结果。mvn dependency:analyze -DignoreNonCompile
仅提供有关工件已解决及其结束位置的信息。它并没有真正显示出任何有用的东西。
[INFO] --- reflections-maven:0.9.5:reflections (default) @ my-module ---
[IJ]-1-ARTIFACT_RESOLVING-[IJ]-path=-[IJ]-artifactCoord=org.reflections:reflections-maven:pom:0.9.5-[IJ]-error=
[IJ]-1-ARTIFACT_RESOLVED-[IJ]-path=C:\Users\user\.m2\repository\org\reflections\reflections-maven\0.9.5\reflections-maven-0.9.5.pom-[IJ]-artifactCoord=org.reflections:reflections-maven:pom:0.9.5-[IJ]-error=
[IJ]-1-ARTIFACT_RESOLVING-[IJ]-path=-[IJ]-artifactCoord=org.reflections:reflections-maven:jar:0.9.5-[IJ]-error=
[IJ]-1-ARTIFACT_RESOLVED-[IJ]-path=C:\Users\user\.m2\repository\org\reflections\reflections-maven\0.9.5\reflections-maven-0.9.5.jar-[IJ]-artifactCoord=org.reflections:reflections-maven:jar:0.9.5-[IJ]-error=
[IJ]-1-ARTIFACT_RESOLVING-[IJ]-path=-[IJ]-artifactCoord=org.reflections:reflections:jar:0.9.5-[IJ]-error=
[IJ]-1-ARTIFACT_RESOLVED-[IJ]-path=C:\Users\user\.m2\repository\org\reflections\reflections\0.9.5\reflections-0.9.5.jar-[IJ]-artifactCoord=org.reflections:reflections:jar:0.9.5-[IJ]-error=
[IJ]-1-ARTIFACT_RESOLVING-[IJ]-path=-[IJ]-artifactCoord=com.google.guava:guava:jar:r08-[IJ]-error=
[IJ]-1-ARTIFACT_RESOLVED-[IJ]-path=C:\Users\user\.m2\repository\com\google\guava\guava\r08\guava-r08.jar-[IJ]-artifactCoord=com.google.guava:guava:jar:r08-[IJ]-error=
...
[IJ]-1-ARTIFACT_RESOLVING-[IJ]-path=-[IJ]-artifactCoord=org.jfrog.maven.annomojo:maven-plugin-anno:jar:1.4.0-[IJ]-error=
[IJ]-1-ARTIFACT_RESOLVED-[IJ]-path=C:\Users\user\.m2\repository\org\jfrog\maven\annomojo\maven-plugin-anno\1.4.0\maven-plugin-anno-1.4.0.jar-[IJ]-artifactCoord=org.jfrog.maven.annomojo:maven-plugin-anno:jar:1.4.0-[IJ]-error=
[IJ]-1-ARTIFACT_RESOLVING-[IJ]-path=-[IJ]-artifactCoord=org.jfrog.jade.plugins.common:jade-plugin-common:jar:1.3.8-[IJ]-error=
[IJ]-1-ARTIFACT_RESOLVED-[IJ]-path=C:\Users\user\.m2\repository\org\jfrog\jade\plugins\common\jade-plugin-common\1.3.8\jade-plugin-common-1.3.8.jar-[IJ]-artifactCoord=org.jfrog.jade.plugins.common:jade-plugin-common:jar:1.3.8-[IJ]-error=
...
此处中的
reflections-maven
检查工件,但是,提到的工件也没有出现在我的项目中。问题:如果我的本地存储库中没有这样的 JAR,则在执行插件时构建会失败。在这种情况下,我怎样才能找到一种方法将任何插件(特别是在我的例子中的
reflections-maven
)真正导入并在项目中执行?
请随时在评论中询问更多信息。如果重要的话,我会使用 IntelliJ Idea、Maven 3.3.9 和 Java 7。
解决方案1(对我不起作用):我尝试运行
mvn -Dverbose=true -Doutput=./effective-pom.xml help:effective-pom
,effective-pom
的正常形式和详细形式都显示与reflections-maven
插件相同的输出,没有关于其来源的附加信息。由于文件相当大,我附上截图:
这可能是我的 Maven 3.3.9 与自定义
settings.xml
和特定 IntelliJ Idea 的问题。我假设 verbose
输出将导致真正的原点。
解决方案2:
安装 Netbeans 后(我默认使用 IntelliJ Idea),POM 编辑器的
Effective
选项卡终于引导我找到了定义插件的真正来源。
遗憾的是,IntelliJ Idea 并未通过其有效的 POM 提供此类导航,并且如果不手动单击父 POM,导航到原点几乎是不可能的。
mvn -Dverbose=true -Doutput=./effective-pom.xml help:effective-pom
我们可以分析我们的“有效pom”(Pom#inheritance,Pom#super-Pom)。
verbose
标志还将添加源pom(工件)作为每个输出行的注释。output
设置输出文件。 (默认:打印到控制台)“除其他外”它允许我们定位/覆盖任何继承的插件/依赖项/“pom 元素”。
不幸的是,输出生成:
在 intellij 中,我们有一个 “显示有效 Pom” 命令,它基本上调用提到的目标并显示输出(不幸的是,在社区版中!?),没有“详细”。
netbeans 在其“Pom 编辑器”中有一个“有效”选项卡:
(,“图表”视图也非常好......(以及“maven IDES(我知道的)”中的独特功能,并且它可以在未root的情况下安装;)!
所以魔力似乎按照记录工作:
boolean (since:)3.2.0 将 POM 输入位置输出为注释。<verbose>
默认值为:
。false
用户属性是:
。verbose
为了让
verbose
产生效果,我们需要:
<project ...>
...
<build>
<plugins>
<artifactId>maven-help-plugin</artifactId>
<version>3.2.0</version> <!-- or higher! -->
</plugins>
</build>
...
</project>
...分别可以(无需pom修改):
mvn -Dverbose=true -Doutput=./eff.pom.xml \
org.apache.maven.plugins:maven-help-plugin:3.2.0:effective-pom