无法找出 Maven 插件来自哪里

问题描述 投票:0回答:1

执行一个特定的 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
插件相同的输出,没有关于其来源的附加信息。由于文件相当大,我附上截图:

enter image description here

这可能是我的 Maven 3.3.9 与自定义

settings.xml
和特定 IntelliJ Idea 的问题。我假设
verbose
输出将导致真正的原点。


解决方案2:

安装 Netbeans 后(我默认使用 IntelliJ Idea),POM 编辑器的

Effective
选项卡终于引导我找到了定义插件的真正来源。

enter image description here

遗憾的是,IntelliJ Idea 并未通过其有效的 POM 提供此类导航,并且如果不手动单击父 POM,导航到原点几乎是不可能的。

java maven pom.xml maven-plugin reflections
1个回答
1
投票

帮助:Effective-Pom

mvn -Dverbose=true -Doutput=./effective-pom.xml help:effective-pom

我们可以分析我们的“有效pom”(Pom#inheritancePom#super-Pom)。

  • verbose
    标志还将添加源pom(工件)作为每个输出行的注释。
  • output
    设置输出文件。 (默认:打印到控制台)

“除其他外”它允许我们定位/覆盖任何继承的插件/依赖项/“pom 元素”。

不幸的是,输出生成:

  • 对于“琐碎”项目,“数百”行 pom。
  • 对于“非平凡”(spring-boot-starter),它很容易进入“万行”(pom 行)。

中,我们有一个 “显示有效 Pom” 命令,它基本上调用提到的目标并显示输出(不幸的是,在社区版中!?),没有“详细”。


在其“Pom 编辑器”中有一个“有效”选项卡:

  • 滚动/光标在这里也“麻烦”,但我们有“完整”:
  • “导航”(窗口)支持
  • 文字搜索
  • 代码提示等...

(,“图表”视图也非常好......(以及“maven IDES(我知道的)”中的独特功能,并且它可以在未root的情况下安装;)!


更新:

所以魔力似乎按照记录工作:

<verbose>
boolean (since:)3.2.0 将 POM 输入位置输出为注释。

默认值为:

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
© www.soinside.com 2019 - 2024. All rights reserved.