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ódOstatecznie 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ęp1) 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.rapc4) 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 problemuEsaj 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 zTojest 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.