BlackBerry: COD aus JAR-Quelldatei in Ant-Skript erstellen

Wie verwende ich Ant (bb-ant-tools) bisKompilieren Sie eine JAR-Datei in eine COD? d.h. ohne andere Quelldateien

Grund

Letztendlich brauche ich ein Skript, das laufen wirdJar Jar Links (Jarjar) während des Builds, um die Namespace-Probleme bei der Verwendung unseres SDK in mehreren Apps zu umgehen. Jarjar verwendet eine JAR-Datei als Eingabe und gibt vermutlich eine JAR-Datei aus.

Also, um jarjar in einem BB-Ant-Tools-Build auszuführen, muss ich es wissenKompilieren dieser Ausgabe-JAR in eine COD.

Ich konzentriere mich nur auf diesen Teil des Problems, um andere mögliche Fehlerquellen zu minimieren. Ich werde den Jarjar-Schritt versuchen, sobald ich einen JAR in einen COD einbauen kann.

Fortschritt

1) Ich kann mein Projekt in einen funktionierenden COD integrieren, auf dem Gerät signieren und ausführen.

2) Um den SDK-Code einzuschließen, füge ich derzeit die Quellordner zum Hauptprojekt hinzu. (In Zukunft würde ich gerne wissen, wie man die Bibliothek als JAR in den Build einbindet -BlackBerry-Ant-Skript zum Einbeziehen von JAR in ein Projekt ohne externe Abhängigkeiten)

3) Die Ausgabe dieses Schritts enthält die üblichen Dateien:

MyApp.cod (wenn ich dies signiere, läuft es perfekt auf dem Gerät)MyApp.cslMyApp.csoMyApp.debugMyApp.jadMyApp.jar (Ich möchte Jarjar auf diese ausführen)MyApp.rapc

4) Ich habe versucht, einen 2. Build auszuführen, wobei ich die obige JAR-Datei als einzige Quelldatei in der JAR-Datei verwendet haberapc Anruf. Ich mache das, indem ich auf das Symbol zeigesrc tag vonrapc in einem Ordner, der nur meine JAR-Datei enthält.

Im letzten Teil des Builds, wenn Rapc istadding die dateien bekomme ich den fehler:

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

(Einzelheiten zum Fehler unten in der bearbeiteten Build-Ausgabe)

Ich kann sehen, dass dies das istDas zweite Mal, dass rapc versucht, diese Datei hinzuzufügen. Ich verstehe nicht warum, da es nur eine Kopie dieser Datei in der JAR gibt.

Ausgabe erstellen (bearbeitet mit...etc lesbar machen)
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>
Umgehung

Esaj hat eingute antwort unten das läuft die Ameisereplace Aufgabe auf dem Quellcode vor dem Kompilieren. Dies bedeutet, dass keine Notwendigkeit zum Ausführen bestehtjarjar in einer resultierenden JAR-Datei, um die Namespace-Probleme zu lösen.

Dies funktioniert für mich, da ich den SDK-Quellcode habe. Für meine Kunden funktioniert es nicht, da ich mein SDK im JAR-Format verteile. Ich hoffe also immer noch auf eine Antwort auf diese Frage.

verbunden

Dieseist ein Duplikat von [So konvertieren Sie JAR-DATEI in COD-Datei mit Ant Build ], aber diese Frage wurde nicht beantwortet, und ich habe weitere Einzelheiten hinzugefügt.

Das istnicht ein Duplikat von:

[ Konvertieren Sie eine .jar-Datei mit bb-ant in eine .cod-Datei ] - Ich habe die akzeptierte Antwort verwendet und mein Fehler ist anders.[ BlackBerry-Ant-Skript zum Einbeziehen von JAR in ein Projekt ohne externe Abhängigkeiten ] - Bei dieser Frage geht es darum, die Bibliothek als JAR hinzuzufügen, anstatt den Quellcode wie oben zu verwenden. In gewisser Weise handelt es sich um einen Vorläuferschritt, da die Ausgabe immer noch durch jarjar laufen müsste.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage