我正在编写一个简单的插件,可以在编译期间为其他插件创建一些文件可见。
想象一下,我有这个项目结构(这个结构出现在我维护的很多项目中):
/
| -- /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 */
}
这就是我被困住的地方。我应该如何处理依赖项的文件,以使它们对下一个插件可见?
答案 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解压缩 -
类并复制默认文件。