3

It seems to me that what I'm trying to achieve is incredibly simple, yet is becoming incredibly painful.

I have ProjectA which is a BlackBerry Application project. I have ProjectB which is a Java library project. I want to refer to ProjectB from ProjectA. I can add a reference but when I run ProjectA, it doesn't work. I have source code for both the projects and both are compiled using Java compiler 1.4

I have tried multiple things but everything fails for some reason:

1. pre-verify.exe on ProjectB It fails with an error "JAR file creation failed with error -1" I can see that the cod and jar files have been created but when add the jar file to ProjectA and run it, it doesn't work. Not sure if I need to add the .cod file.

2. Create new BlackBerry Library Project and reference it in ProjectA I create a new project ProjectC and then add the jar of ProjectB to it. Then I add a reference to ProjectC in ProjectA. But I cant import classes from ProjectB

Pls suggest a way out. I'm using Eclipse Plug-in and relying on Eclipse's build capabilities

Pavan Kulkarni
  • 456
  • 3
  • 15

2 Answers2

7

Figured out answer myself. Publishing here in case someone stumbles upon this. Here are the steps:

  1. Create your library and export as JAR (or download the 3rd party JAR)
  2. Run preverify.exe on the JAR

    preverify.exe -verbose -classpath "C:/Program Files/Research In Motion/BlackBerry JDE 5.0.0/lib/net_rim_api.jar" jarname.jar

  3. If you are lucky, you won't run into any issues and you will be done. But I wasn't lucky enough. I got the below error

Error: No such file or directory. JAR file creation failed with error -1

There are two possible causes of this:

  • jar.exe is not added to your PATH. If so, add it (found in your JAVA installation directory) to PATH
  • cvfm or -cfm option on jar.exe fails to execute. I'm not aware of the reason but the way to fix this is to use -cf option, point to the .class files but don't use the manifest file. here is an
    example:

    "C:\Program Files\Java\jdk1.6.0_26\bin\jar.exe" -cf "output\json-1.0.jar" tmp12996/

tmp12996 contains the preverified .class files. You may run into different issues other than the one I've listed above.

  1. Once jar is created from above step, make sure that it's structure is as you anticipate. One way to check is to rename the .jar to .zip, unzip it and then check it. If it is not as you need, you can change the structure and then repack it (I wouldn't do any major changes though)

  2. Then add this newly built jar to your BlackBerry application as a reference i.e. add to Java Build Path in your eclipse and Check it in Order and Export window.

  3. That's it! You are good to go! Run you app!

You may face error indicating that the module contains verification errors when you try to run in the simulator. One possible cause of this issue is that your library (the original JAR) contains APIs that are not compatible with J2ME or BB JRE. You may not get a compiler error when you build your library independently as it is compiled against Java 1.4 (or whatever your version is). Best to figure the issue out is to move all your code into your BB App project and then build it. That will tell you all the issues upfront. You make the changes as required and then move the code back to the library. If you don't have source code for the library you are using (like a 3rd party library), you may be out of luck! Also remember that there could be other issues than what I've hit upon and solved.

I'm documenting this at length as it has taken an awful amount of time for me to figure all this out; and to say the least, was most frustrating!

Pavan Kulkarni
  • 456
  • 3
  • 15
1

I found another solution. If you get error -1 while preverifying your JAR file, just run your library application once. Because if you don't run the application, the deliverables folder will be empty. Make sure this folder is not empty.

krishna
  • 11
  • 1