问题标签 [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.
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 个文件。
maven - 如何拦截maven插件构建日志
我创建了一个使用 mojo-executor 运行另一个 Mojo 的 maven Mojo。执行此操作后,该 Mojo 执行的输出将变为默认输出。因此,当它被执行时,它会打印以下内容:
好的,所有这些警告都是意料之中的,因为我已经创建了一些带有 Errorprone 的错误检查器。但问题是我必须从标准输出中删除此输出并将其放入文件中。但只有那一部分。
到目前为止,我尝试的是在执行时将输出重定向到文件:
前提: - 我不能使用mvn --logFile
,或者-l
因为他们从标准输出中删除所有内容并将其放在文件中,而且用户放置 --logFile 或类似的东西,解决方案也不可靠。
java - Maven 插件:跨多个模块访问资源
我目前正在编写一个自定义 maven 插件,用于在多模块 maven 项目中生成 XML 文件。
我的 maven 结构非常标准:父项目文件夹中的一个父项目和一个由项目组件组成的模块:
我需要按模块列出一组由自定义注释标记的类。我已经编写了一组自定义注解和一个注解处理器,以便在编译时在相应的模块输出目录 (${project.build.outputDirectory}) 中创建一个 XML 文件。
现在我需要将每个模块 XML 合并到一个文件中,但我不知道如何从我的 maven 插件中访问每个模块,除非将每个路径设置为参数(我不喜欢这种方法)。
关于如何做到这一点的任何想法?maven插件可以遍历项目模块吗?
先感谢您。
maven - AbstractMojo 实现
实际上,我想在我的项目上运行 mvn clean install 时运行一个 java 类。我发现最好的解决方案是使用 abstractMojo 并在 execute 方法中定义处理。你能给我一个描述这种机制的简单例子吗?.. 谢谢
java - Mojo 添加 eclipse 源文件夹
我编写了一个生成源代码的 Maven 插件。这基本上可以正常工作。
问题是,Eclipse 无法将我生成代码的目录识别为附加源文件夹。因此我得到大量的错误说XXX cannot be resolved to a type
。不过,从命令行编译和安装的 Maven 工作正常。
首先,我通过使用解决了这个问题org.codehaus.mojo.build-helper-maven-plugin
。这工作正常。但是,我不喜欢我的插件的用户也需要添加第二个插件。因此,我查看了目标的源代码,add-source
build-helper-maven-plugin
并决定将相关代码直接添加到我的插件中。因此我的插件看起来像这样:
执行期间没有错误,无论是从命令行还是从 Eclipse(使用 Alt+F5 或右键单击 -> Maven -> 更新项目)。但是,无法识别附加的源目录。
我做错什么了吗?还是我需要一个特殊的 m2e 连接器?目前我正在使用生命周期映射插件解决这个 m2e 连接器
maven - 用于读取应用程序类和生成 java 的 maven mojo
我想编写一个 maven 插件,它将在构建时探索我的应用程序的类路径,搜索具有特定注释的类,并为这些类生成一些添加实用程序的 java 代码,它们应该在应用程序的 JAR 中编译。
所以我写了一个 mojo,继承自AbstractMojo
,并让项目通过:
我拥有大部分代码,并且我的 mojo 确实得到了执行,但是在正确的构建阶段插入我的 mojo 时遇到了麻烦。
如果我这样插入:
然后将我生成的 java 代码编译到 JAR 文件中。
请注意,我用于project.addCompileSourceRoot
注册输出文件夹。
但这对我来说还不够,因为构建还为时过早:我无法读取类路径并从我的项目中找到类。我认为他们还没有编译。
我搜索这样的课程:
(我正在使用vavr但无论如何你都会明白要点)
所以,通过在阶段插入我的代码GENERATE_SOURCES
,这段代码不起作用,我找不到任何类。
PROCESS_CLASSES
但是,如果我在阶段插入我的魔力:
然后找到我的类,我可以从应用程序访问其余代码,但是我生成的代码在构建中没有被考虑在内,尽管使用addCompileSourceRoot
.
如何让这两个功能同时工作:从应用程序的其余部分探索代码的能力以及生成将与 JAR 的其余部分一起编译的代码的能力?
我想一个可能的答案是“你不能”,但据我所知,querydsl和immmutables正在这样做(我尝试阅读他们的源代码但找不到相关代码)。
maven - 当从父级调用时,MavenProject getArtifacts 在模块上返回不同的列表
在 Mojo 中,我需要扫描作为插件的所有模块依赖项,为此我使用 mavenProject.getArtifacts()。如果我直接构建模块,这工作正常,所以不是从父级构建,而是在 de 模块的目录中调用“mvn clean package”。在这种情况下,我得到了该模块的所有依赖项。
但是,如果我构建整个项目,那么当构建到达模块时,我会得到一组完全不同的依赖项。我不明白为什么。该插件在模块的 pom 中定义。
mavenProject 在 Mojo 中通过以下方式获得:
当然包括:
如果我直接构建模块,我会得到:
如果模块是作为整个项目的一部分构建的,我会得到:
谁能解释为什么我对同一个模块有不同的依赖关系?
java - 无法从自定义 Maven 插件中使用 org.reflections.Reflections 找到类
我创建了一个自定义 Maven 插件,如下所示:
我正在这样使用它:
在 Mojo 的执行方法中,我尝试使用 Reflections api 检索扩展接口 CdsData 的所有接口。
我得到五个结果,它们依赖于我执行插件的 pom。所以没关系。但是,我还使用另一个已设置的插件(cds4j-maven-plugin)生成了一些实现
而且我试图将我的自定义插件的阶段设置为准备包,以便在上述插件生成源之后执行它。但是,我得到的结果并不比我之前提到的五个多。我也希望看到那些生成的接口。
这可能是类路径还是类加载器问题?或者可能是阶段?
我还尝试将生成的类的包放入 Reflections 构造函数中,并尝试按照第 8 行所述配置 Reflections 类加载:https ://www.hellojava.com/a/80798.html
任何帮助表示赞赏!谢谢!
干杯,凯杰德
xml - 将特殊字符传递给 Maven Mojo Map 键
我的 Maven MOJO 插件中有以下属性:
我通常以以下方式设置(基于Maven 指南):
现在我想允许插件用户提供特殊字符作为映射键。
我尝试了不同的方法,但它们都不起作用:
是否有向后兼容的方式来更改我的 Maven 插件(不破坏现有客户端)?
java - 在 maven mojo 中加载项目类
我正在尝试在执行 maven mojo 期间加载项目类。
不幸的是,这个操作失败了,因为类加载器缺少一个引用的类。环顾四周,我已经发现Maven mojo 插件从托管项目加载类的方法,而Maven 插件无法加载类
我结合了这两种方法,最终得到以下代码:
加载失败的类是接口“org.bson.codecs.Codec”的实现,它包含在“org.mongodb:bson”中,通过依赖隐式导入:
这个依赖对另一个jar(范围:提供)有依赖,包含提到的接口,可以在maven依赖树中看到:
当我查看创建的类加载器的类路径元素时,我看到 mongodb-driver-sync.jar 包含在内,但由于它声明了“org.mongodb:bson”依赖项,其范围提供了接口仍然不在类路径。
所以,最后一个问题是:如何加载一个从“间接”依赖项引用类的类?