我正在尝试使用maven shade插件和maven组件插件从我的maven多模块构建中构建一个程序集。我需要的是这样的结构:
的 assembly.zip
------------- dllDir
----------------- 一些dll位于子模块中
------------- .netDir
----------------- 完整jar(由所有模块jar组成)为.net lib(va ikvm)
------------- fulljarDir
----------------- java full jar(包含所有模块jar)
----------------- java api jar(只有一些类)
----------------- 全罐来源
----------------- api-jar来源
------------- 图书馆
----------------- 所有子模块库(“普通”-jar,sources-jar,jar-with-dependencies)
------------- extlibDir
----------------- 其他一些位于某些子模块目录中的jar / dll
------------- docDir
----------------- 一些文档(从汇编项目本身复制)
目前我正在使用程序集项目中的shade插件创建 full-jar 和 api-jar (所有模块都被描述为程序集项目的依赖项)与他们的来源。
我使用程序集插件(带和汇编描述符)从模块中收集jar和dll:
<moduleSets>
<moduleSet>
<includeSubModules>false</includeSubModules>
<sources>
<outputDirectoryMapping>libs/${module.basedir.name}
</outputDirectoryMapping>
<excludeSubModuleDirectories>
true
</excludeSubModuleDirectories>
<fileSets>
<fileSet>
<directory>/target/</directory>
<includes>
<include>*dependencies.jar</include>
<include>*javadoc.jar</include>
<include>*sources.jar</include>
</includes>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>/native/usblibs.Linux/Release/</directory>
<includes>
<include>*.so</include>
</includes>
<outputDirectory>../../dllDir</outputDirectory>
</fileSet>
<fileSet>
<directory>/native/usb.Linux/lib/libusb-1.0/</directory>
<includes>
<include>*.so</include>
</includes>
<outputDirectory>../../usb</outputDirectory>
</fileSet>
<fileSet>
<directory>/native/usb.Linux/lib/usblib/i386/
</directory>
<includes>
<include>*.so</include>
</includes>
<outputDirectory>../../usb</outputDirectory>
</fileSet>
</fileSets>
</sources>
</moduleSet>
</moduleSets>
现在的问题是我正在使用shade插件来编译fat jar(所有模块)。但我也在使用模块,所以包装需要pom
,这导致了一个小问题,即树荫插件创建了pom(其中有源代码)而不是jar。如果我在阴影中使用<finalName>
标记,我可以将完整的工件重命名为jar,但不会重命名生成的源。
任何提示或技巧?也许有更好的方法来制作这样的装配?
最佳, 扬