我正在为Talend Open Studio制作一个插件;该平台的组件体系结构需要所有外部JAR在组件描述符XML文件中以如下形式声明:
<IMPORT MODULE="commons-collections-3.2.1.jar" NAME="commons-collections-3.2.1"
REQUIRED="true"/>
我使用Maven依赖插件来管理所有这些外部JAR
有没有办法在列表或其他内容中获取所有依赖项名称?这样我可以构建所需的字符串(可能使用antcontrib任务),填充$ {parameter}并最终使用maven-replacer-plugin将其添加到XML文件中?
答案 0 :(得分:3)
最简单的解决方案是通过maven-dependency-plugin使用buld-classpath goal。可以为此目标提供补充参数,以将结果放入如下文件中:
mvn dependency:build-classpath -Dmdep.outputFile=classpath.out
答案 1 :(得分:0)
好的,我部分地解决了这种方式应该有一些限制:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<dependencies>
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
<version>1.0b3</version>
<exclusions>
<exclusion>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-nodeps</artifactId>
<version>1.6.5</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>package</phase>
<id>copy-resources</id>
<configuration>
<exportAntProperties>true</exportAntProperties>
<tasks>
<!-- add the ant tasks from ant-contrib -->
<taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="maven.plugin.classpath"/>
<var name="import.set" value=""/>
<for param="file">
<path>
<fileset dir="${project.build.directory}" includes="*.jar"/>
</path>
<sequential>
<var name="basename" unset="true"/>
<basename file="@{file}" property="basename"/>
<var name="filenames" value="${basename}"/>
<var name="import.clause" value='<IMPORT MODULE="${filenames}" NAME="${filenames}" REQUIRED="true"/>'/>
<var name="import.set" value="${import.clause}${line.separator}${import.set}" />
</sequential>
</for>
<property name="import.jar" value="${import.set}"/>
<echo>${import.jar}</echo>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
还有一些问题:即使exportAntProperties设置为true,属性$ {import.jar}在其他maven目标的ant taska之外仍然不可用,而如果我切换到maven-antrun-plugin 1.7版本,“执行ant任务时出错:org.apache.tools.ant.launch.Locator.fromJarURI(Ljava / lang / String;)Ljava / lang / String;“抛出异常。仍然没有线索......