Generate manifest class-path from in Ant

后端 未结 4 471
说谎
说谎 2020-11-29 01:12

In the build file below, the jar target refers to the jar.class.path property for the manifest class-path. The compile target refers to project.class.path

There is

相关标签:
4条回答
  • 2020-11-29 01:33
    <path id="build.classpath">
      <fileset dir="${basedir}">
         <include name="lib/*.jar"/>
      </fileset>
    </path>
    
    <pathconvert property="manifest.classpath" pathsep=" ">
      <path refid="build.classpath"/>
      <mapper>
        <chainedmapper>
           <flattenmapper/>
           <globmapper from="*.jar" to="lib/*.jar"/>
        </chainedmapper>
      </mapper>
    </pathconvert>
    
    <target depends="compile" name="buildjar">
      <jar jarfile="${basedir}/${test.jar}">
         <fileset dir="${build}" />
         <manifest>
           <attribute name="Main-Class" value="com.mycompany.TestMain"/>
           <attribute name="Class-Path" value="${manifest.classpath}"/>
         </manifest>
     </jar>
    </target>
    

    For further information check out this article.

    0 讨论(0)
  • If you just want a common subpath shared between two (or more) paths, that is easy to do:

    <path id="lib.path>
        <fileset dir="lib">
            <include name="forms-1.2.0.jar"/>
            <include name="BrowserLauncher.jar"/>
        </fileset>
    </path>
    
    <path id="project.class.path">
        <pathelement location="build"/>
        <path refid="lib.path"/>
    </path>
    
    <property name="jar.class.path" refid="lib.path"/>
    

    EDIT Sorry, I misunderstood the question. Try this:

    <property name="jar.class.path" value="lib/forms-1.2.0.jar lib/BrowserLauncher.jar"/>
    
    <path id="project.class.path">
        <pathelement location="build"/>
        <fileset dir="." includes="${jar.class.path}"/>
    </path>
    
    0 讨论(0)
  • 2020-11-29 01:43

    You can use <pathconvert> to convert a path (which can contain a fileset) into a plain string. You'll likely need to <echo> that string to a file, use either <replace> or <replaceregexp> to chop the leading path bits, then finally use <loadfile> to load the manipulated string into the final property.

    Implementation left as an exercise to the reader.

    0 讨论(0)
  • 2020-11-29 01:52

    Assuming Ant 1.7 or above, you can use the manifestclasspath task.

    <path id="dep.runtime">
        <fileset dir="./lib">
            <include name="**/*.jar" />
        </fileset>
    </path>
    <property name="dep_cp" value="${toString:dep.runtime}" />
    
    <target name="default">
        <manifestclasspath property="manifest_cp" jarfile="myjar.jar">
            <classpath refid="dep.runtime" />
        </manifestclasspath>
        <echo message="Build Classpath: ${dep_cp}" />
        <echo message="Manifest Classpath: ${manifest_cp}" />
    </target>
    
    0 讨论(0)
提交回复
热议问题