Ant( bb-ant-tools)を使用してJARファイルをCODにコンパイルするにはどうすればよいですか?つまり、他のソースファイルはありません
理由
最終的に、複数のアプリでSDKを使用する際の名前空間の問題を回避するために、ビルド中にJar Jar Links(jarjar)を実行するスクリプトが必要です。JarjarはJARファイルを入力として受け取り、JARファイルを出力すると思います。
したがって、bb-ant-toolsビルドでjarjarを実行するには、その出力JARをCODにコンパイルする方法を知る必要があります。
他の考えられるエラーの原因を最小限に抑えるために、問題のこの部分だけに焦点を当てています。JARをCODに組み込む方法をマスターできたら、jarjarステップを試行します。
進捗
1)プロジェクトを機能するCODに組み込み、署名してデバイス上で実行できます。
2)sdkコードを含めるために、現在、メインプロジェクトビルドにソースフォルダーを追加しています。(将来的には、ライブラリをJARとしてビルドに含める方法を知りたいです-BlackBerry-外部の依存関係なしにプロジェクトにJARを含めるためのAntスクリプト)
3)このステップの出力には、通常のファイルが含まれます。
- MyApp.cod(これに署名すると、デバイス上で完全に実行されます)
- MyApp.csl
- MyApp.cso
- MyApp.debug
- MyApp.jad
- MyApp.jar(これでjarjarを実行したい)
- MyApp.rapc
4)上記のJARファイルをrapc
呼び出しの唯一のソースファイルとして使用して、2番目のビルドを実行しようとしました。これを行うには、JARファイルのみを含むフォルダーにのsrc
タグを指定します。rapc
ビルドの最後の部分で、rapcがadding
ファイルの場合、次のエラーが発生します。
java.util.zip.ZipException: duplicate entry: MyApp-1.cod
(編集されたビルド出力の以下のエラーの完全な詳細)
rapcがこのファイルを追加しようとするのはこれが2回目であることがわかります。JARにはそのファイルのコピーが1つしかないため、理由がわかりません。
ビルド出力(...etc
読みやすくするために編集)
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>
回避策
Esajには、コンパイルを実行する前にソースコードでAntタスクを実行するという良い答えがあります。これは、名前空間の問題を解決するために、結果のJARファイルでreplace
実行する必要がないことを意味します。jarjar
SDKのソースコードがあるので、これでうまくいきます。SDKをJAR形式で配布しているため、クライアントでは機能しません。ですから、私はまだこの質問に対する答えを期待しています。
関連している
これは[ AntBuildを使用してJARファイルをCODファイルに変換する方法]の複製ですが、その質問には回答されていないため、詳細を追加しました。
これは次の複製ではありません。
- [ bb-antを使用して.jarファイルを.codファイルに変換します]-受け入れられた回答を使用しましたが、エラーが異なります。
- [ BlackBerry-外部依存なしでプロジェクトにJARを含めるAntスクリプト]-この質問は、上記のようにソースコードを使用する代わりに、ライブラリをJARとして追加することに関するものです。ある意味では、その出力はまだjarjarを介して実行する必要があるため、これは先行ステップです。