问题标签 [maven-mojo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
111 浏览

maven - 自 maven 3.3 以来多模块构建中的错误依赖解决方案

我创建了一个 maven 插件,它获取所有项目依赖项并使用以下工件信息填充模板文件:jnlp-maven-plugin。它包括用于观察所描述行为的测试用例。

从 maven 3.3 开始,当依赖项由 shade 插件生成时,插件在多模块构建中拾取了太多的工件。当我连续构建每个模块时,正确提供了传递依赖项。使用 maven 3.2.5 一切正常。

使用以下代码检索工件:AbstractJnlpMojo#73。这会传递地获取依赖项。自 maven 3.3 以来有没有新的方法可以做到这一点?还是我做错了?

另一方面,程序集插件总是正确地获取阴影依赖项。但是那里的依赖关系是用它自己的算法递归解决的。

要重现,必须从 github 克隆项目并安装根模块。这些文件在两个/target/jnlp 中创建。在多模块构建中使用 maven 3.3.X 创建了 30 个文件。在较旧的 maven 版本和单个模块安装中,会创建 20 个文件。

0 投票
1 回答
248 浏览

maven - 如何拦截maven插件构建日志

我创建了一个使用 mojo-executor 运行另一个 Mojo 的 maven Mojo。执行此操作后,该 Mojo 执行的输出将变为默认输出。因此,当它被执行时,它会打印以下内容:

好的,所有这些警告都是意料之中的,因为我已经创建了一些带有 Errorprone 的错误检查器。但问题是我必须从标准输出中删除此输出并将其放入文件中。但只有那一部分。

到目前为止,我尝试的是在执行时将输出重定向到文件:

前提: - 我不能使用mvn --logFile,或者-l因为他们从标准输出中删除所有内容并将其放在文件中,而且用户放置 --logFile 或类似的东西,解决方案也不可靠。

0 投票
2 回答
240 浏览

java - Maven 插件:跨多个模块访问资源

我目前正在编写一个自定义 maven 插件,用于在多模块 maven 项目中生成 XML 文件。

我的 maven 结构非常标准:父项目文件夹中的一个父项目和一个由项目组件组成的模块:

我需要按模块列出一组由自定义注释标记的类。我已经编写了一组自定义注解和一个注解处理器,以便在编译时在相应的模块输出目录 (${project.build.outputDirectory}) 中创建一个 XML 文件。

现在我需要将每个模块 XML 合并到一个文件中,但我不知道如何从我的 maven 插件中访问每个模块,除非将每个路径设置为参数(我不喜欢这种方法)。

关于如何做到这一点的任何想法?maven插件可以遍历项目模块吗?

先感谢您。

0 投票
1 回答
169 浏览

maven - AbstractMojo 实现

实际上,我想在我的项目上运行 mvn clean install 时运行一个 java 类。我发现最好的解决方案是使用 abstractMojo 并在 execute 方法中定义处理。你能给我一个描述这种机制的简单例子吗?.. 谢谢

0 投票
1 回答
315 浏览

java - Mojo 添加 eclipse 源文件夹

我编写了一个生成源代码的 Maven 插件。这基本上可以正常工作。

问题是,Eclipse 无法将我生成代码的目录识别为附加源文件夹。因此我得到大量的错误说XXX cannot be resolved to a type。不过,从命令行编译和安装的 Maven 工作正常。

首先,我通过使用解决了这个问题org.codehaus.mojo.build-helper-maven-plugin。这工作正常。但是,我不喜欢我的插件的用户也需要添加第二个插件。因此,我查看了目标源代码,add-sourcebuild-helper-maven-plugin并决定将相关代码直接添加到我的插件中。因此我的插件看起来像这样:

执行期间没有错误,无论是从命令行还是从 Eclipse(使用 Alt+F5 或右键单击 -> Maven -> 更新项目)。但是,无法识别附加的源目录。

我做错什么了吗?还是我需要一个特殊的 m2e 连接器?目前我正在使用生命周期映射插件解决这个 m2e 连接器

0 投票
1 回答
273 浏览

maven - 用于读取应用程序类和生成 java 的 maven mojo

我想编写一个 maven 插件,它将在构建时探索我的应用程序的类路径,搜索具有特定注释的类,并为这些类生成一些添加实用程序的 java 代码,它们应该在应用程序的 JAR 中编译。

所以我写了一个 mojo,继承自AbstractMojo,并让项目通过:

我拥有大部分代码,并且我的 mojo 确实得到了执行,但是在正确的构建阶段插入我的 mojo 时遇到了麻烦。

如果我这样插入:

然后将我生成的 java 代码编译到 JAR 文件中。

请注意,我用于project.addCompileSourceRoot注册输出文件夹。

但这对我来说还不够,因为构建还为时过早:我无法读取类路径并从我的项目中找到类。我认为他们还没有编译。

我搜索这样的课程:

(我正在使用vavr但无论如何你都会明白要点)

所以,通过在阶段插入我的代码GENERATE_SOURCES,这段代码不起作用,我找不到任何类。

PROCESS_CLASSES但是,如果我在阶段插入我的魔力:

然后找到我的类,我可以从应用程序访问其余代码,但是我生成的代码在构建中没有被考虑在内,尽管使用addCompileSourceRoot.

如何让这两个功能同时工作:从应用程序的其余部分探索代码的能力以及生成将与 JAR 的其余部分一起编译的代码的能力?

我想一个可能的答案是“你不能”,但据我所知,querydslimmmutables正在这样做(我尝试阅读他们的源代码但找不到相关代码)。

0 投票
1 回答
87 浏览

maven - 当从父级调用时,MavenProject getArtifacts 在模块上返回不同的列表

在 Mojo 中,我需要扫描作为插件的所有模块依赖项,为此我使用 mavenProject.getArtifacts()。如果我直接构建模块,这工作正常,所以不是从父级构建,而是在 de 模块的目录中调用“mvn clean package”。在这种情况下,我得到了该模块的所有依赖项。

但是,如果我构建整个项目,那么当构建到达模块时,我会得到一组完全不同的依赖项。我不明白为什么。该插件在模块的 pom 中定义。

mavenProject 在 Mojo 中通过以下方式获得:

当然包括:

如果我直接构建模块,我会得到:

如果模块是作为整个项目的一部分构建的,我会得到:

谁能解释为什么我对同一个模块有不同的依赖关系?

0 投票
1 回答
163 浏览

java - 无法从自定义 Maven 插件中使用 org.reflections.Reflections 找到类

我创建了一个自定义 Maven 插件,如下所示:

我正在这样使用它:

在 Mojo 的执行方法中,我尝试使用 Reflections api 检索扩展接口 CdsData 的所有接口。

我得到五个结果,它们依赖于我执行插件的 pom。所以没关系。但是,我还使用另一个已设置的插件(cds4j-maven-plugin)生成了一些实现

而且我试图将我的自定义插件的阶段设置为准备包,以便在上述插件生成源之后执行它。但是,我得到的结果并不比我之前提到的五个多。我也希望看到那些生成的接口。

这可能是类路径还是类加载器问题?或者可能是阶段?

我还尝试将生成的类的包放入 Reflections 构造函数中,并尝试按照第 8 行所述配置 Reflections 类加载:https ://www.hellojava.com/a/80798.html

任何帮助表示赞赏!谢谢!

干杯,凯杰德

0 投票
1 回答
53 浏览

xml - 将特殊字符传递给 Maven Mojo Map 键

我的 Maven MOJO 插件中有以下属性:

我通常以以下方式设置(基于Maven 指南):

现在我想允许插件用户提供特殊字符作为映射

我尝试了不同的方法,但它们都不起作用:

是否有向后兼容的方式来更改我的 Maven 插件(不破坏现有客户端)?

0 投票
1 回答
40 浏览

java - 在 maven mojo 中加载项目类

我正在尝试在执行 maven mojo 期间加载项目类。

不幸的是,这个操作失败了,因为类加载器缺少一个引用的类。环顾四周,我已经发现Maven mojo 插件从托管项目加载类的方法,而Maven 插件无法加载类

我结合了这两种方法,最终得到以下代码:

加载失败的类是接口“org.bson.codecs.Codec”的实现,它包含在“org.mongodb:bson”中,通过依赖隐式导入:

这个依赖对另一个jar(范围:提供)有依赖,包含提到的接口,可以在maven依赖树中看到:

当我查看创建的类加载器的类路径元素时,我看到 mongodb-driver-sync.jar 包含在内,但由于它声明了“org.mongodb:bson”依赖项,其范围提供了接口仍然不在类路径。

所以,最后一个问题是:如何加载一个从“间接”依赖项引用类的类?