BlackBerry: utwórz COD z pliku źródłowego JAR w skrypcie Ant

Jak korzystać z Anta (bb-ant-tools) doskompiluj plik JAR na COD? tj. bez innych plików źródłowych

Powód

Ostatecznie potrzebuję skryptu, który zostanie uruchomionyLinki Jar Jar (jarjar) podczas kompilacji, aby obejść problemy z przestrzenią nazw używania naszego sdk w wielu aplikacjach. Jarjar pobiera plik JAR jako dane wejściowe i przypuszczam, że wysyła plik JAR.

Aby uruchomić jarjar w kompilacji bb-ant-tools, muszę wiedziećjak skompilować JAR w COD.

Skupiam się tylko na tej części problemu, aby zminimalizować inne możliwe źródła błędów. Spróbuję wykonać krok jarjar, gdy będę mógł opanować budowę JAR w COD.

Postęp

1) Mogę zbudować swój projekt w działającym COD, podpisać i uruchomić na urządzeniu.

2) Aby dołączyć kod sdk, aktualnie dodaję foldery źródłowe do głównej kompilacji projektu. (W przyszłości chciałbym wiedzieć, jak dołączyć bibliotekę do kompilacji jako JAR -BlackBerry - skrypt Ant do włączenia JAR do projektu bez zewnętrznych zależności)

3) Wynik tego kroku obejmuje zwykłe pliki:

MyApp.cod (jeśli to podpiszę, działa idealnie na urządzeniu)MyApp.cslMyApp.csoMyApp.debugMyApp.jadMyApp.jar (Chcę uruchomić jarjar na ten temat)MyApp.rapc

4) Próbowałem uruchomić drugą kompilację, biorąc powyższy plik JAR i używając go jako jedynego pliku źródłowego w plikurapc połączenie. Robię to, wskazującsrc tag zrapc w folderze zawierającym tylko mój plik JAR.

W ostatniej części kompilacji, gdy rapc jestadding pliki, pojawia się błąd:

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

(pełne szczegóły błędu poniżej w edytowanym pliku wyjściowym)

Widzę, że to jestDrugi raz rapc próbuje dodać ten plik. Nie rozumiem dlaczego, ponieważ w JAR jest tylko jedna kopia tego pliku.

Tworzenie wyjścia (edytowane za pomocą...etc aby było czytelne)
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>
Obejście problemu

Esaj madobra odpowiedź poniżej który prowadzi Antareplace zadanie na kodzie źródłowym przed wykonaniem kompilacji. Oznacza to, że nie ma potrzeby uruchamianiajarjar na dowolnym wynikowym pliku JAR, aby rozwiązać problemy z przestrzenią nazw.

To zadziała dla mnie, ponieważ mam kod źródłowy SDK. Nie będzie działać dla moich klientów, ponieważ rozpowszechniam mój zestaw SDK w formacie JAR. Nadal mam nadzieję na odpowiedź na to pytanie w obecnej postaci.

Związane z

Tojest duplikatem z [Jak przekonwertować plik JAR FILE na plik COD przy użyciu Ant Build ], ale to pytanie nie zostało udzielone i dodałem więcej szczegółów.

To jestnie duplikat:

[ Konwertuj plik .jar do pliku .cod, używając bb-ant ] - Użyłem zaakceptowanej odpowiedzi, a mój błąd jest inny.[ BlackBerry - skrypt Ant do włączenia JAR do projektu bez zewnętrznych zależności ] - to pytanie dotyczy dodawania biblioteki jako pliku JAR zamiast używania kodu źródłowego, tak jak powyżej. W pewnym sensie jest to krok prekursora, ponieważ jego wyjście wciąż wymaga uruchomienia przez jarjar.

questionAnswers(3)

yourAnswerToTheQuestion