BlackBerry: cree COD desde el archivo fuente JAR en el script Ant

¿Cómo uso Ant (bb-ant-tools) acompilar un archivo JAR en un COD? es decir, sin otros archivos de origen

Razón

En última instancia, necesito un script que se va a ejecutarJar Jar Enlaces (jarjar) durante la compilación, para solucionar los problemas de espacio de nombres de usar nuestro SDK en varias aplicaciones. Jarjar toma un archivo JAR como entrada, y supongo que genera un archivo JAR.

Así que para ejecutar jarjar en una compilación de bb-ant-tools, necesito sabercómo compilar ese JAR de salida en un COD.

Me estoy enfocando solo en esta parte del problema para minimizar otras posibles fuentes de error. Intentaré el paso de jarjar una vez que pueda dominar la construcción de un JAR en un COD.

Progreso

1) Puedo construir mi proyecto en un COD de trabajo, firmarlo y ejecutarlo en el dispositivo.

2) Para incluir el código sdk, actualmente agrego las carpetas de origen a la compilación principal del proyecto. (En el futuro me gustaría saber cómo incluir la biblioteca en la compilación como un JAR -BlackBerry: secuencia de comandos de Ant para incluir JAR en un proyecto sin dependencias externas)

3) La salida de este paso incluye los archivos habituales:

MyApp.cod (si firmo esto, se ejecuta perfectamente en el dispositivo)MyApp.cslMyApp.csoMyApp.debugMyApp.jadMyApp.jar (Quiero ejecutar jarjar en esto)MyApp.rapc

4) Intenté ejecutar una segunda compilación, tomando el archivo JAR anterior y usándolo como el único archivo fuente en elrapc llamada. Hago esto señalando elsrc etiqueta derapc en una carpeta que contiene sólo mi archivo JAR.

En la parte final de la compilación, cuando rapc esadding Los archivos, me sale el error:

 java.util.zip.ZipException: duplicate entry: MyApp-1.cod

(todos los detalles del error a continuación en la salida de compilación editada)

Puedo ver que esta es la2ª vez que rapc intenta agregar este archivo.. No entiendo por qué, ya que solo hay una copia de ese archivo en el archivo JAR.

Salida de compilación (editada con...etc para hacerlo legible)
build:
    [mkdir] Skipping C:\development\ant\new_test\MyApp\build because it already exists.
     [copy] Copying 1 file to C:\development\ant\new_test\MyApp\build
     [copy] Copying C:\development\ant\new_test\MyApp\icon.png to C:\development\ant\new_test\MyApp\build\icon.png
     [rapc] Compiling 1 source files to MyApp.cod
     [rapc] Executing 'C:\Java\jdk1.6.0_24\jre\bin\java.exe' with arguments:
     [rapc] '-classpath'
     [rapc] 'C:\Java\jdk1.6.0_24\lib\tools.jar;C:\development\tools\bb-jde\jde5.0\components\bin\rapc.jar'
     [rapc] 'net.rim.tools.compiler.Compiler'
     [rapc] '-verbose'
     [rapc] 'import=C:\development\tools\bb-jde\jde5.0\components\lib\net_rim_api.jar'
     [rapc] 'codename=MyApp'
     [rapc] 'MyApp.rapc'
     [rapc] '@sources.txt'
     [rapc]
     [rapc] The ' characters around the executable and arguments are
     [rapc] not part of the command.
     [rapc] Setting environment variable: PATH=........etc
     [rapc] Reading resource: MyApp.cod
...etc
     [rapc] Parsing classfile: com/MyApp/ui/views/WelcomeBar.class
...etc
     [rapc] Parsing import: C:\development\tools\bb-jde\jde5.0\components\lib\net_rim_api.jar(net_rim_amms.cod)
...etc
     [rapc] Resolving
...etc
     [rapc] Optimizing
     [rapc] Utilities.java:449: Warning!: local variable(s) { finished } initialized but not used in: com.cobi.library.Utilities.split(String,String)
...etc
     [rapc] Populating
     [rapc] Invoking: jar -cfmv C:\development\ant\new_test\MyApp\build\MyApp.jar C:\Users\Richard\AppData\Local\Temp\rapc_598c0c5a.dir\META-INF\MANIFEST.MF MyApp.cod MyApp-1.cod MyApp-2.cod MyApp.csl MyApp.cso -C C:\Users\Richard\AppData\Local\Temp\rapc_598c2ad7.dir .
     [rapc] added manifest
     [rapc] adding: MyApp.cod(in = 63208) (out= 41042)(deflated 35%)
     [rapc] adding: MyApp-1.cod(in = 75448) (out= 42559)(deflated 43%)
     [rapc] adding: MyApp.csl(in = 91) (out= 69)(deflated 24%)
     [rapc] adding: MyApp.cso(in = 157) (out= 93)(deflated 40%)
...etc - adding all files I can see in the JAR...

     [rapc] adding: MyApp-1.cod

     java.util.zip.ZipException: duplicate entry: MyApp-1.cod
     [rapc]     at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:175)
     [rapc]     at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:92)
     [rapc]     at sun.tools.jar.Main.addFile(Main.java:713)
     [rapc]     at sun.tools.jar.Main.create(Main.java:466)
     [rapc]     at sun.tools.jar.Main.run(Main.java:180)
     [rapc]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [rapc]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     [rapc]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     [rapc]     at java.lang.reflect.Method.invoke(Method.java:597)
     [rapc]     at net.rim.tools.compiler.c.e.if(Unknown Source)
     [rapc]     at net.rim.tools.compiler.c.e.a(Unknown Source)
     [rapc]     at net.rim.tools.compiler.Compiler.a(Unknown Source)
     [rapc]     at net.rim.tools.compiler.Compiler.a(Unknown Source)
     [rapc]     at net.rim.tools.compiler.Compiler.compile(Unknown Source)
     [rapc]     at net.rim.tools.compiler.Compiler.main(Unknown Source)

     [rapc] java.io.IOException: jar command failed: jar -cfmv C:\development\ant\new_test\MyApp\build\MyApp.jar C:\Users\Richard\AppData\Local\Temp\rapc_598c0c5a.dir\META-INF\MANIFEST.MF MyApp.cod MyApp-1.cod MyApp-2.cod MyApp.csl MyApp.cso -C C:\Users\Richard\AppData\Local\Temp\rapc_598c2ad7.dir .
     [rapc]     at net.rim.tools.compiler.Compiler.a(Unknown Source)
     [rapc]     at net.rim.tools.compiler.Compiler.a(Unknown Source)
     [rapc]     at net.rim.tools.I/O Error: jar command failed: jar -cfmv C:\development\ant\new_test\MyApp\build\MyApp.jar C:\Users\Richard\AppData\Local\Temp\rapc_598c0c5a.dir\META-INF\MANIFEST.MF MyApp.cod MyApp-1.cod MyApp-2.cocompiler.Compiler.compile(Unknown Source)
     [rapc]     at net.rim.tools.compiler.Compiler.main(Unknown Source)
     [rapc] d MyApp.csl MyApp.cso -C C:\Users\Richard\AppData\Local\Temp\rapc_598c2ad7.dir .

BUILD FAILED
C:\development\ant\new_test\MyApp\build.xml:65: Java returned: -1
        at org.apache.tools.ant.taskdefs.Java.execute(Java.java:111)
        at ca.slashdev.bb.tasks.RapcTask.executeRapc(RapcTask.java:583)
        at ca.slashdev.bb.tasks.RapcTask.execute(RapcTask.java:401)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:390)
        at org.apache.tools.ant.Target.performTasks(Target.java:411)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
        at org.apache.tools.ant.Main.runBuild(Main.java:809)
        at org.apache.tools.ant.Main.startAnt(Main.java:217)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

Total time: 9 seconds

C:\development\ant\new_test\MyApp>
Solución

Esaj tiene unbuena respuesta a continuación que corre la hormigareplace Tarea en el código fuente antes de hacer la compilación. Esto significa que no hay necesidad de correrjarjar en cualquier archivo JAR resultante para resolver los problemas de espacio de nombres.

Esto funcionará para mí, ya que tengo el código fuente del SDK. No funcionará para mis clientes, porque distribuyo mi SDK en formato JAR. Así que todavía estoy esperando una respuesta a esta pregunta tal como está.

Relacionado

Estaes un duplicado deCómo convertir JAR ARCHIVO a COD archivo utilizando Ant Build ] pero esa pregunta no ha sido respondida, y he agregado más detalles.

Esto esno un duplicado de:

[ Convierta un archivo .jar en un archivo .cod usando bb-ant ] - He utilizado la respuesta aceptada, y mi error es diferente.[ BlackBerry: secuencia de comandos de Ant para incluir JAR en un proyecto sin dependencias externas ] - esta pregunta es acerca de agregar la biblioteca como un JAR en lugar de usar el código fuente como lo hago arriba. En cierto modo, es un paso precursor, ya que su salida aún tendría que ejecutarse a través de jarjar.

Respuestas a la pregunta(3)

Su respuesta a la pregunta