Domanda

Nel file di costruzione di sotto, l'obiettivo vaso si riferisce alla proprietà jar.class.path per la classe-percorso manifesto. L'obiettivo compilazione riferisce a project.class.path

Non c'è ridondanza qui, perché jar.class.path e project.class.path sono molto simili. Essi devono essere entrambi aggiornati quando vengono aggiunte le librerie, che può essere un dolore se l'elenco delle librerie diventa molto lunga. C'è un modo migliore? Qualsiasi soluzione deve essere cross-platform e utilizzare sempre percorsi relativi.

Modifica:
Esso dovrebbe generare classpath JAR da un set di file e non viceversa, così posso utilizzare caratteri jolly per esempio includere tutti i file JAR in una directory.

<?xml version="1.0"?>
<project name="Higgins" default="jar" basedir=".">

    <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="lib">
        <include name="forms-1.2.0.jar"/>
        <include name="BrowserLauncher.jar"/>
      </fileset>
    </path>

    <target name="prepare">
        <mkdir dir="build"/>
    </target>

    <target name="compile" depends="prepare" description="Compile core sources">
        <javac srcdir="src"
               includes="**"
               destdir="build"
               debug="true"
               source="1.5">
          <classpath refid="project.class.path"/>
        </javac>
    </target>

    <target name="jar" depends="compile" description="Generates executable jar file">
        <jar jarfile="higgins.jar">
            <manifest>
                <attribute name="Main-Class" value="nl.helixsoft.higgins.Main"/>
                <attribute name="Class-Path" value="${jar.class.path}"/>
            </manifest>
            <fileset dir="build" includes="**/*.class"/>            
            <fileset dir="src" includes="**/*.properties"/>         
        </jar>
    </target>

</project>
È stato utile?

Soluzione

Supponendo Ant 1.7 o superiore, è possibile utilizzare l'attività manifestclasspath .

<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>

Altri suggerimenti

<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>

Per ulteriori informazioni visitare il questo articolo .

Se si desidera solo un sottotracciato comune condiviso tra due (o più) i percorsi, che è facile da fare:

<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"/>

Modifica Scusa, ho frainteso la questione. Prova questo:

<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>

È possibile utilizzare per convertire un percorso (che può contenere un set di file) in una stringa pianura. È probabile che tu debba che stringa in un file, utilizzare a uno o per tagliare i bit iniziali del percorso, poi finalmente utilizzare per caricare la stringa manipolato nella proprietà finale.

Attuazione lasciato come esercizio per il lettore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top