使用ant清单路径条目构建从依赖项jar的路径

时间:2013-12-13 06:30:43

标签: java ant ant-contrib

我的问题是,我必须从

这样的路径构建清单条目类路径
  • C:\用户\ rosansamuel.ivy2 \缓存\ log4j的\ log4j的\罐\ log4j的-1.2.14.jar

你可以请任何人提出一些想法吗?

下面是代码,我正在尝试使用propertyregex,但实际上我无法获取jar名称。

<for list="${ofsml.manifest.classpath.list}" delimiter=";" param="individual.path">
  <sequential>
    <property name="single.artifact.path" value="@{individual.path}"/>
    <echo message="single aritfact path name : ${single.artifact.path}"/>
    <path id="my.base.path">
      <pathelement path="${single.artifact.path}"/>
    </path>
    <property name="artifact.id.file" refid="my.base.path"/>
    <echo message=" artifact.id.file: ${artifact.id.file}"/>
    <propertyregex property="artifact.id" input="${artifact.id.file}" regexp=".*.jar" select="\1"/>
    <echo message="jar name : ${artifact.id}"/>
    <echo message="individual.path = @{individual.path}"/>
  </sequential>
</for>

1 个答案:

答案 0 :(得分:0)

ANT中有一个manifestclasspath任务,可以从文件集生成相关文件路径列表。

我也看到你正在使用常春藤,所以为什么不使用它的retrieve任务将依赖项jar放在相对于你正在构建的jar的本地目录中。否则你的jar将被硬编码,以期望它的依赖是一个适用于你的机器的绝对路径,但不是非常便携。

这是一个小片段:

  <target name="build" depends="compile">
    <ivy:retrieve pattern="${dist.dir}/lib/[artifact].[ext]"/>

    <manifestclasspath property="jar.classpath" jarfile="${dist.jar}">
      <classpath>
        <fileset dir="${dist.dir}/lib" includes="*.jar"/>
      </classpath>
    </manifestclasspath>

    <jar destfile="${dist.jar}" basedir="${build.dir}/classes">
      <manifest>
        <attribute name="Main-Class" value="${dist.main.class}"/>
        <attribute name="Class-Path" value="${jar.classpath}"/>
      </manifest>
    </jar>
  </target>

有关更完整的示例,请参阅: