我正在开发一种新的基于jvm的语言,目前我正在创建一个maven插件来编译这种新语言。React堆建造有10或12个模块,但简而言之,我想让这个特殊的设置工作:
Reactor Build Order:
Fxxx Parent Project [pom]
Fxxx Language Core [eclipse-plugin]
Fxxx Compiler Maven Plug-in [maven-plugin]
Fxxx Standard API [jar]
语言核心项目包含解析新语言并生成字节码的代码。maven插件应该使该功能在maven构建中可用。标准api项目是用新语言编写的,需要使用maven插件进行翻译,该插件刚刚在前一个reactor步骤中构建。
此外,我希望标准api模块以及此新语言的任何其他未来用户能够通过指定以下内容来编译新语言:
<build>
<plugins>
<plugin>
<groupId>dev.fxxx</groupId>
<artifactId>fxxx.compiler</artifactId>
<version>1.0.0</version>
</plugin>
</plugins>
</build>
具体来说,用户不必指定任何执行;插件的 compile
目标应该自动附加到 compile
构建阶段(在默认生命周期中)。
所以,我搜索了一下,发现这可以通过将一些代码放在 META-INF/plexus/components.xml
文件;我唯一需要补充的是 <extensions>true</extensions>
到插件节。然而,当我这么做的时候,有两件事发生了:
我得到一个警告: F Standard API uses dev.f:f.compiler as extensions, which is not possible within the same reactor build. This plugin was pulled from the local repository!
我的构建突然变得非常不确定,有时成功完成,有时由于各种原因失败,主要与类加载有关(它肯定不使用先前在同一个reactor中构建的maven插件的当前版本;如果有的话,它似乎使用了一个任意(!)早期快照)
所以,很明显, <extensions>true</extensions>
这不是一个好办法,我也不希望用户必须指定插件的gav坐标以外的任何东西。我确实记得有一些现有的插件正是以这种方式工作的,尽管我现在想不出任何具体的例子。
创建不需要配置执行的maven插件的正确方法是什么?
暂无答案!
目前还没有任何答案,快来回答吧!