当前位置: 首页 > 知识库问答 >
问题:

如何避免向子项目添加不相关的maven插件?

彭涵衍
2023-03-14

我有一个maven项目A,带有插件P的pluginManagement配置。我有一个单独的maven项目B,不依赖于插件P。ProjectA不是ProjectB的父项目。我有第三个项目C,其父项目是使用插件P的A

A (pluginManagement P)
|- B
|- C (plugin P)

当我试图从项目a上的pluginP运行目标时,maven也尝试执行该目标项目B,但失败了。

[错误]在当前项目和插件组[org.apache.maven.plugins,org.codehaus.mojo]中未找到前缀“P”的插件,这些插件组可从存储库[local]获得-

但是,如果我添加一个插件P到项目B的插件依赖项,一切正常。

A (pluginManagement P)
|- B (pluginManagement P)
|- C (plugin P)

有没有办法避免这种依赖传播?我好像做错了什么。

共有2个答案

桓瀚
2023-03-14

经过一些研究,似乎有两种Maven方法可以做到这一点。为了清楚起见,假设有另一个项目D也使用插件P,该插件P配置有配置PC,该插件P具有目标G

创建一个没有pluginManagementP的额外聚合器POM,并在其下聚合项目B

Alpha
|- A (pluginManagement P [PC])
   |- C (plugin P)
   |- D (plugin P)
|- B

不要在使用它的项目中使用插件管理P和硬代码P的配置PC

A
|- B
|- C (plugin P [PC])
|- D (plugin P [PC])

创建一个单独的聚合器POM似乎是最好的解决方案。然而,对于我来说,有一个更简单的解决方案,可以减少搅动。我可以直接在projectC上调用P的目标,如下所示:

mvn -pl :C P:G

这使得maven反应器可以看到我的整个项目结构,而无需将目标传播到A的所有模块上。

曾阳飙
2023-03-14
  1. 在顶层使用pluginManagement,而不是plugins,然后将plugin子句放在您想要的位置。
  2. (或)设置继承为false.
 类似资料:
  • 我有一个Gradle插件,可以按预期编译和工作。我想与源代码一起发布一个使用Gradle插件的示例应用程序,它还允许我轻松测试插件的更改。现在要做到这一点,我必须向buildScript块添加一个类路径依赖项。是否可以添加将与示例项目一起编译的依赖本地插件?我现在面临的主要问题是,当尝试同步示例项目时,插件不存在,导致失败。

  • 我需要一些帮助。em以这种方式向活动添加片段。问题是每次调用openFragment时,它都会创建片段并添加。这是显而易见的。问:我做了什么修改,所以它只能添加一次片段。在下一次使用相同的片段标记调用时,它不会执行任何操作。 案例:第一次按下按钮添加片段并显示。我再按一次同样的按钮,它没有反应。

  • 一些子项目有自己的build.gradle文件应用的java插件。在根项目的build.gradle中,我想将plugin findbugs应用于已经有java插件的每个子项目。build.gradle我尝试过: 和 外部循环确实会为每个子项目运行一次,但内部闭包在这两种情况下都不会运行。我怀疑这是因为子项目构建脚本在外部脚本之前生效。除了手动将findbugs插件应用到每个子项目之外,还有什么方

  • 问题内容: 我创建了一个新的Spring Web应用程序,我非常想使用Maven处理构建/依赖关系。我的问题是,该项目依赖于一些现有的本地项目,而目前尚无法对它们进行美化。是否有可能依赖这些项目而不破坏它们? 问题答案: 不,您不应该尝试这样做。Maven的主要目标是拥有标准化的构建。这就是使Maven易于使用的原因:异常不是常态。这就是为什么Maven要求所有依赖项都采用典型的Maven格式(P

  • 问题内容: 对于以下任务,我需要您的建议和指导。 我有一个包含两个JComboBox的框架,假设它们分别命名为combo1和combo2,一个JTable和其他组件。 在初始阶段,当上述组件可见框架时。combo1组合框填充了一些值,但在初始阶段未选择任何值,combo2组合框被禁用并且表为空。 我在combo1和combo2上添加了一个actionListener。combo1中有两种类型的值,