我不太了解JBoss以及是否还有另一种方式可以做到这一点,但是您可以使用GMaven非常简单地做到这一点:
<plugin> <groupId>org.prehaus.gmaven</groupId> <artifactId>gmaven-plugin</artifactId> <version>1.3</version> <configuration> <source> def sw = new StringWriter() def xml = new groovy.xml.MarkupBuilder(sw) xml.module(xmlns:'urn:jboss:module:1.0', name:'ats.platform') { resources { project.runtimeClasspathElements.each { def path = it.find(".*?([\w\.-]*\.jar)") { it[1] } !path?:'resource-root'(path:path) } } } println sw </source> </configuration></plugin>需要注意的几件事:
- 该脚本会将XML吐出到stdout,但是您显然可以很容易地将其写入文件或其他文件。
runtimeClasspathElements
jar 的包含绝对路径,这就是为什么我用正则表达式解析它的原因。您可以调整正则表达式以包含更多路径,或者,如果您需要的不仅仅是jar文件名,则只需在字符串前添加一个字符串即可。
我已经在github上发布了一个工作示例(这只是一个POM),其中将上述插件配置绑定到了初始化构建阶段。如果您有git,则可以使用以下方法自己克隆并运行它:
git clone git://github.com/zzantozz/testbed tmpcd tmpmvn -q initialize -pl stackoverflow/7755255-gmaven-to-build-xml-from-classpath
在示例项目中,我添加了jdom 1.0和dom4j 1.6.1作为依赖项,这是它创建的输出:
<module xmlns='urn:jboss:module:1.0' name='ats.platform'> <resources> <resource-root path='jdom-1.0.jar' /> <resource-root path='dom4j-1.6.1.jar' /> <resource-root path='xml-apis-1.0.b2.jar' /> <resource-root path='aspectjrt-1.6.11.jar' /> </resources></module>
注意:我不是一个熟练的专家,所以可能有一个更加熟练的方法,但是即使如此,您也可以看到它是多么容易。



