Hacer referencia a una biblioteca externa en una compilación Ant

votos
1

Tenemos un script de construcción ant para un proyecto que estamos desarrollando para un PDA. En eclipse tenemos una carga de bibliotecas referenciadas y sé cómo hacer que funcionen cuando ejecutamos el jar en el PDA porque tenemos un archivo .lnk donde puedes agregar las bibliotecas externas simplemente agregando lo siguiente:

512#\J9\PPRO11\bin\j9.exe -jcl:ppro11 -cp \dist\WiFiTest.jar;\placelab\lib\placelab.jar j2medemo.wifi.WiFiTest

Agregar cualquier biblioteca que necesitemos después del argumento -cp. Sin embargo, no tengo idea de cómo replicar esto en el archivo ant (ninguna idea es en realidad una exageración, pero después de leer toda la documentación todavía no la entiendo).

Tenemos lo siguiente.

<target name=jar depends=prepare>
 <delete file=${dist}/${appname}.jar/>
 <delete file=${dist}/MANIFEST.MF/>
 <manifest file=${dist}/MANIFEST.MF>
    <attribute name=Built-By value=${user.name}/>
    <attribute name=Main-Class value=j2medemo.GUI.MapPanel/>
</manifest>
<jar destfile=${dist}/${appname}.jar
     basedir=${classes}
     includes=**/*.class, **/*.jpg, **/*.gif,**/*.png,**/*.xml
     manifest=${dist}/MANIFEST.MF
     />
</target>

He intentado agregar todo lo que puedo pensar, pero no ayuda. ¿Puedo agregarlo a la parte de inclusión?

En segundo lugar, tenemos un objetivo de ejecución:

<target name=run description=run depends=jar>
    <exec dir=${j9bin} executable=${j9bin}\j9.exe>
        <arg line=-jcl:ppro11 -cp '${dist}\${appname}.jar;placelab\lib\placelab.jar' ${mainclass}/>
        <env key=JAVA_HOME path=${j9home}/>
    </exec>
</target>

Y quería cambiarlo para ejecutar una clase diferente, así que creé los dos objetivos siguientes:

<target name=jarSAX depends=prepare>
 <delete file=${dist}/SAXParse.jar/>
 <delete file=${dist}/MANIFEST.MF/>
 <manifest file=${dist}/MANIFEST.MF>
    <attribute name=Built-By value=${user.name}/>
    <attribute name=Main-Class value=j2medemo.Routes.SAXParse/>
</manifest>
<jar destfile=${dist}/SAXParse.jar
     basedir=${classes}
     includes=**/*.class, **/*.jpg, **/*.gif,**/*.png,**/*.xml
     manifest=${dist}/MANIFEST.MF
     />
</target>

Y

<target name=runSAXParser description=run depends=jarSAX>
        <exec dir=${j9bin} executable=${j9bin}\j9.exe>
            <arg line=-jcl:ppro11 -cp '${dist}\SAXParse.jar' j2medemo.Routes.SAXParse/>
            <env key=JAVA_HOME path=${j9home}/>
        </exec>
    </target>

Pero si intento ejecutar esto, aparece el siguiente error:

Exception in thread main java.lang.NoClassDefFoundError: j2medemo.Routes.SAXParse

Si alguien tiene ideas / soluciones para cualquiera de las preguntas, sería de gran ayuda.

Publicado el 06/03/2009 a las 21:01
por usuario
En otros idiomas...                            


1 respuestas

votos
3

Por lo que puedo decir, necesitas agregar los elementos classpath al manifiesto. Debería verse algo como esto:

 <manifest file="${dist}/MANIFEST.MF">
    <attribute name="Built-By" value="${user.name}"/>
    <attribute name="Main-Class" value="j2medemo.Routes.SAXParse"/>
    <attribute name="Class-Path" value="WiFiTest.jar;placelab.jar"/>
 </manifest>

Las entradas de classpath deben ser relativas a la ubicación del Jar en el distributable. Desde allí, debería poder ejecutar el jar directamente (usando la opción de línea de comando -jar, no estoy seguro de qué es esto para J9). Debería ser similar a la llamada Java análoga:

java -jar MainJar.jar
Respondida el 06/03/2009 a las 21:19
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more