如何获取参数中所有依赖项JAR的列表?

时间:2012-11-03 19:09:04

标签: maven talend ant-contrib maven-dependency-plugin

我正在为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文件中?

2 个答案:

答案 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='&lt;IMPORT MODULE="${filenames}" NAME="${filenames}" REQUIRED="true"/&gt;'/>
                        <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;“抛出异常。仍然没有线索......