我正在编写一个maven插件,基本上应该执行以下操作:
MANIFEST的添加或作为META-INF目录中的新文件)在我刚开始创建maven插件的第一步时,我的(可能是愚蠢的)问题是:
如何从构建项目时执行的插件中访问项目的源代码(最好的方法:作为构建路径上的包,我可以轻松地处理)。
到目前为止,我唯一的方法是通过以下方式获取项目的源代码
// assuming the project exists (to exclude instance checks etc.)
MavenProject project = (MavenProject) getPluginContext().get("project");
String projectSource = project.getSourceDirectory();然后通过文件操作处理该目录的内容。但在我看来,这是如此丑陋,以至于我确信有一个更好的解决方案(我只是无法通过google、maven页面和堆栈溢出找到它)。
发布于 2012-05-22 08:10:32
例如,您知道包含有关当前项目的信息的Mojo API。这可以通过使用适当的标记自动注入神经丛,如下所示:
public class WhatEverMojo extends AbstractMojo {
/**
* The Maven project.
*
* @parameter expression="${project}"
* @required
* @readonly
*/
private MavenProject project;
}也许我误解了你的问题,但我建议你阅读插件开发简介。
更新:看看其他插件,比如apt-maven插件,可能会有所帮助。
以下几点可能会有所帮助:
/**
* The source directories containing the sources to be processed.
*
* @parameter expression="${project.compileSourceRoots}"
* @required
* @readonly
*/
private List<String> compileSourceRoots;您可以深入了解的完整的源代码可通过SVN获得。。
发布于 2015-08-06 15:55:40
注入MavenProject的语法现在是:
@Parameter(defaultValue = "${project}", required = true, readonly = true)
MavenProject project;您必须将maven-project的依赖项添加到插件的pom中:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0.6</version>
</dependency>然后,为了管理源文件,我不确定,但似乎首选的答案是对MavenProject.getSourceDirectory()使用文件系统API。我不知道您会期望核心maven在此之后告诉您有关源的内容。当然,其他插件--比如编译java的插件--可能对某些类型的项目有更复杂的领域模型。
发布于 2016-09-07 07:38:08
我使用静态字段,因为在一次运行中,类只被加载到类加载器中一次。
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);
}https://stackoverflow.com/questions/10697964
复制相似问题