如何以编程方式从pom.xml执行特定的插件/ Mojo?
我是其中一个Maven插件(不是Apache/Codehaus,完全是独立)的作者。有时我会收到支持请求或测试用例,其中我真的需要使用现有的.基本上,我得到的测试用例是样本/测试项目(带有,等等)。pom.xml
pom.xml
src/main/resoures
src/main/java
我需要的是一种方法:
- 加载现有的 .
pom.xml
- 在那里找到我的插件的特定执行(通常它是唯一的一个)。
- 获取 - 完全初始化/配置,并正确注入所有组件和参数的实例。
MyMojo
- 执行。
MyMojo
- 重要的是测试项目是单独的项目,我不想将它们复制到插件的Maven模块中。
- 我希望能够在没有远程调试的情况下执行此操作。
通过调试,我的意思是能够在断点(也是有条件的)上设置和停止,在源代码上单步执行/退出/结束。
理想情况下,我希望能够 - 例如在JUnit测试或某个类的方法中。(我可以提供,等等。所有其他定义都应该从中加载。executeMyMojoFrom(new File("pom.xml"))
main
groupId
artifactId
pom.xml
我怎样才能做到这一点?
到目前为止,我尝试过什么:
-
Debug As...
在 Eclipse 中 - 工作得不够好(找不到源代码,断点不起作用,因为它不是 Java 项目上下文)pom.xml
- Maven Embedder/Invoker 解决方案 - 通过 CLI 在单独的进程中生成事物。忘记断点,无需调试。
- 使用 Eclipse 进行远程调试,然后按照 Pascal Thivent 的建议从 Eclipse 进行远程调试。这是迄今为止最好的选择。但是,远程调试意味着单独启动,并且也不能保证我在Eclipse中的JAR与所使用的JAR完全相同。所以这里有一定的距离。
mvnDebug
mvnDebug
mvnDebug
-
maven-plugin-testing-harness
- 我实际上认为这将完成任务。但首先,我在篮筐里跳了几个小时,只是为了让它开始。所有重要的依赖项都是“提供的”,因此我首先必须找出这些工件的正确版本组合。然后 - 才发现抽象MojoTestCase
仅在您要测试的插件模块中工作。当我认为这是Maven插件的测试工具时,我可能错了。它似乎是该插件模块中插件的测试工具。这不是不合逻辑的,但对我的情况没有帮助。我想在其他模块中测试我的插件。maven-plugin-testing-harness
因此,现在我通过远程调试解决方案获得了最佳结果。但是我正在寻找的实际上是类似于但不是硬连接到插件模块的东西。有没有人碰巧有一个提示,如果这种方法存在于Maven工件的某个地方?maven-plugin-testing-harness
更具体地说,我想写一些这样的内容:
public void testSomething()
throws Exception
{
File pom = getTestFile( "pom.xml" );
assertNotNull( pom );
assertTrue( pom.exists() );
MyMojo myMojo = (MyMojo) lookupMojo( "myGroupId", "myArtifactid", ...,
"myGoal", pom );
assertNotNull( myMojo );
myMojo.execute();
...
}
将其与此处进行比较 - 它几乎就在那里。不应该硬连接到Maven模块中(因为它在 中)。MyMojoTest
mymojo
maven-plugin-testing-harness
更新
评论中对问题的一些答案:
你的意思是你不希望这样的测试类,即驻留在与相同的项目内,即你的插件项目?为什么?
MyMojoTest
MyMojo
完全。我想调试现有Maven项目中的插件执行,我不想先将该项目移动到我的插件项目中以便能够运行测试。我希望能够测试/调试现有项目。理想情况下,我只需要在项目的src/test/jaca中添加依赖项和子类。这将是调试执行的良好工具。将目标项目拖到我的Mojo项目中开销太大了 - 而且大多数情况下,这些都不是我想长期保留的测试用例。我希望,这回答了,为什么。my-maven-plugin-testing
MyMojoTest
无论如何,这只是一个约定,以保持插件模块的内部,而不是规则......
project-to-test/pom.xml
src/test/resources
我的问题不是 的位置,这是容易配置的。我的困难在于,以某种方式硬编码为Mojo的项目。它使用Mojo,在包含项目中查找其他特殊文件/描述符。所以我不能在非Mojo项目中使用它,或者我可以吗?这是我的问题。pom.xml
project-to-test
maven-plugin-testing-harness
pom.xml
我不知道为什么没有帮助你...
Debug as...
也不确定,但(1)断点不起作用,(2)由于某种原因,源代码没有“附加”。