【问题标题】:MavenProject: Get the available classes for use on my pluginMavenProject:获取可用的类以在我的插件上使用
【发布时间】:2012-11-19 20:58:49
【问题描述】:

我正在加载一个 Maven 项目,如 here 所述。我试图弄清楚如何检索源根,以便找出我拥有的 Java 类,以便我的 Mojo 可以使用它们。

我尝试了其中的几种方法,例如 getResources 或 getScriptSources ,但没有运气。有什么想法吗?

提前致谢!

编辑:

我被要求详细说明我正在尝试做的事情,所以这里是:

我正在开发的插件将获取项目中的源代码并从中创建测试用例。除非已配置,否则我想为所有类生成测试,为此,我需要以某种方式找出我的源代码在哪里,以便正确配置。

希望对您有所帮助。

这是repository。我计划稍后发布,但我按要求提供了来源。

【问题讨论】:

  • 你能详细说明你想要达到的目标吗?
  • 你只想要源目录路径,比如../src/main/java/
  • 是的,我可以从那里扫描其余部分。我不关心默认的/src/main/java,更多的是可以通过插件或其他方式在pom中定义的其他源。
  • 我试了一下,但返回的列表是空的。我希望至少列出默认的 src/main/java,但什么也没得到。

标签: maven maven-plugin


【解决方案1】:

你读过plugin developers documentation吗?

该页面将链接到Plugins Cookbook,后者链接到具有The maven project, or the effective pom.Mojo Developer Cookbook,并允许您通过

访问org.apache.maven.project.MavenProject 对象
/** @parameter default-value="${project}" */
private org.apache.maven.project.MavenProject mavenProject;

或者通过 Java 5 注释

@Component
MavenProject project;

您可以致电getCompileSourceRoots() 获取将用于编译的目录列表。

您还需要阅读有关如何设置包含/排除项的更多信息。您可以使用其他插件作为如何执行此操作的示例,例如maven-compiler-plugin

如果您想使用注解,请确保您的 pom 配置符合 using annotations 并且您也在类级别使用注解,这一点非常非常重要。混合 javadoc 注释可能不起作用。

【讨论】:

  • 我确实阅读并尝试过,但 getCompileSourceRoots() 返回空列表。我期待租用的 src/main/java 但没有运气。
  • 我已经查看了 maven-compiler-plugin 以及它们的操作方式,但相当于获取 MavenProject 并调用 getCompileSourceRoots() 但也给出了一个空列表。我正在尝试的项目在默认 src/main/java 路径中有一个源文件。
  • 根据邮件列表响应,无法访问您的源代码(以及破解时间/倾向) * 自下而上 - 从编译器插件复制并粘贴到您的代码中 * 自上而下 - 多态编译器插件进入你的代码你应该找到问题所在。或者调试步骤跟踪编译器插件以查看如何/为什么正确设置 getCompileSourceRoots(),并对您的插件执行相同操作。
  • 听起来有道理,我试试看!
  • 在我继续调查问题时添加了存储库链接。
【解决方案2】:

我认为最简单的解决方案是定义一个mojo parameter

/**
 * @parameter default-value="${project.build.sourceDirectory}"
 * @required
 */
private File sourceDirectory;

或使用新的annotation based definition:

@Parameter(required = true, defaultValue="${project.build.sourceDirectory}"}
private File sourceDirectory;

这应该会给你想要的结果。

【讨论】:

  • 我希望能够从加载的 MavenProject 中获得它。这已经在 pom 中定义了。
  • 上面的定义究竟会做什么......因为通常你会在一个maven项目(生命周期)中运行一个插件。
  • 有一些方法可以配置额外的源文件夹,我希望它可以包含在 MavenProjet 对象中,例如 getSources()。但不是。
  • 这是一个将源代码添加到项目的插件示例。我正在尝试检测 MavenProject 对象(或其他地方)上的那种东西
猜你喜欢
  • 2016-05-29
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
相关资源
最近更新 更多