开发一个Maven 3插件,为编译过程提供一些样板文件

时间:2014-04-18 12:22:56

标签: java maven groovy maven-3 maven-plugin

我正在编写一个简单的插件,可以在编译期间为其他插件创建一些文件可见

想象一下,我有这个项目结构(这个结构出现在我维护的很多项目中):

/
| -- /src
|    |---- /main
|          |------ /assembly
|                  |---------- file1
|                  |---------- file2
|                  |---------- fileN
|          |------ /java
|          |------ /resources
|
| -- pom.xml

我希望避免在每个项目中将所有内容都保留在/assembly下。我想将默认文件存储在单独的工件/文件中,例如

/
| -- /src
|    |---- /main
|          |------ /assembly
|                  |---------- file1
|                  |---------- file2
|                  |---------- fileN

我希望我的插件在编译期间合并我的项目与默认文件

我还需要能够有选择地覆盖默认文件,所以说我在/assembly中有200个默认文件但在一个项目中我需要提供不同的file2 ,或添加fileN+1

我想我可以尝试shade或其他合并插件,但合并项目不是我个案的最终结果(另外我想学习写插件)。

重点是我将我的插件插入generate-resoruces(或者......),项目中有一个插件(绑定到package期望/assembly中找到它的配置。

这就是我想要实现的目标:提供一组默认文件(在任意目录中),能够覆盖它们进行合并结果对下一个插件可见


我来到这段代码:

Artifact artifact = project.dependencyArtifacts.find { 
   /* find the dependency with boilerplate files */  
}

JarFile jar = new JarFile(artifact.file)
jar.entries().each {
  /* make the entries visible to other next plugins */
}

这就是我被困住的地方。我应该如何处理依赖项的文件,以使它们对下一个插件可见?

1 个答案:

答案 0 :(得分:0)

“我希望我的插件在编译期间将我的项目与默认文件合并。”
嗯,这是要走的路:
您的文件所在的位置无关紧要 只需将它们复制到预期的文件夹,保持现有文件不变 使您的默认工件使用不同的文件夹来存储默认文件,
因此,在打开包装时,您当前的项目中会有一些 将此工件指定为依赖。
从那里复制它们..很好吗? 如果不合适:
提供您自己的解包工件实现 基于Mark
Donszelmann的nar-naven-plugin的工作,我在构建C / C ++的maven插件时这样做了 - 文物。 这不是太难。

List dependencies = this.getMavenProject().getDependencies();
    Iterator<Dependency> it = dependencies.iterator();
    String baseDir = this.getLocalRepository().getBasedir();

与    getMavenProject()返回MavenProject和getLocalRepository ArtifactRepository。

从那里你可以构建你的zip(jar)的路径,然后用java.util.zip解压缩 -
类并复制默认文件。