首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在maven插件中处理项目源

如何在maven插件中处理项目源
EN

Stack Overflow用户
提问于 2012-05-22 07:53:26
回答 3查看 3.8K关注 0票数 7

我正在编写一个maven插件,基本上应该执行以下操作:

  1. 处理构建的项目的所有类。
  2. 创建一个描述源代码部分的文件
  3. 将该文件添加到构建的jar中(作为对MANIFEST的添加或作为META-INF目录中的新文件)

在我刚开始创建maven插件的第一步时,我的(可能是愚蠢的)问题是:

如何从构建项目时执行的插件中访问项目的源代码(最好的方法:作为构建路径上的包,我可以轻松地处理)。

到目前为止,我唯一的方法是通过以下方式获取项目的源代码

代码语言:javascript
复制
// assuming the project exists (to exclude instance checks etc.)
MavenProject project = (MavenProject) getPluginContext().get("project");
String projectSource = project.getSourceDirectory();

然后通过文件操作处理该目录的内容。但在我看来,这是如此丑陋,以至于我确信有一个更好的解决方案(我只是无法通过google、maven页面和堆栈溢出找到它)。

EN

回答 3

Stack Overflow用户

发布于 2012-05-22 08:10:32

例如,您知道包含有关当前项目的信息的Mojo API。这可以通过使用适当的标记自动注入神经丛,如下所示:

代码语言:javascript
复制
public class WhatEverMojo extends AbstractMojo {

    /**
     * The Maven project.
     *
     * @parameter expression="${project}"
     * @required
     * @readonly
     */
    private MavenProject project;
}

也许我误解了你的问题,但我建议你阅读插件开发简介

更新:看看其他插件,比如apt-maven插件,可能会有所帮助。

以下几点可能会有所帮助:

代码语言:javascript
复制
/**
 * The source directories containing the sources to be processed.
 * 
 * @parameter expression="${project.compileSourceRoots}"
 * @required
 * @readonly
 */
private List<String> compileSourceRoots;

您可以深入了解的完整的源代码可通过SVN获得。

票数 7
EN

Stack Overflow用户

发布于 2015-08-06 15:55:40

注入MavenProject的语法现在是:

代码语言:javascript
复制
@Parameter(defaultValue = "${project}", required = true, readonly = true)
MavenProject project;

您必须将maven-project的依赖项添加到插件的pom中:

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-project</artifactId>
    <version>2.0.6</version>
</dependency>

然后,为了管理源文件,我不确定,但似乎首选的答案是对MavenProject.getSourceDirectory()使用文件系统API。我不知道您会期望核心maven在此之后告诉您有关源的内容。当然,其他插件--比如编译java的插件--可能对某些类型的项目有更复杂的领域模型。

票数 4
EN

Stack Overflow用户

发布于 2016-09-07 07:38:08

我使用静态字段,因为在一次运行中,类只被加载到类加载器中一次。

代码语言:javascript
复制
private static final Set<MavenProject> proceeded = new HashSet<MavenProject>();

@Override
public void execute() throws MojoExecutionException {
    MavenProject project = (MavenProject) getPluginContext().get("project");
    if (proceeded.contains(project)) {
        getLog().info("Already done in this run.");
        return;
    } else {
        proceeded.add(project);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10697964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档