Jar Indexing
Hi all,
I'm a little confused about the jar -i option. I have created a jar like
jar vcmf manifest.mf MyApplet.jar com imagesIf I now try to create the INDEX.LIST with
jar i MyApplet.jarthe following exception is thrown:
java.util.zip.ZipException: No such file or directory
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:203)
at java.util.jar.JarFile.<init>(JarFile.java:132)
at java.util.jar.JarFile.<init>(JarFile.java:70)
at sun.tools.jar.Main.getJarPath(Main.java:793)
at sun.tools.jar.Main.getJarPath(Main.java:809)
at sun.tools.jar.Main.genIndex(Main.java:827)
at sun.tools.jar.Main.run(Main.java:195)
at sun.tools.jar.Main.main(Main.java:903)The jar file is definetly there. Do I miss something?
Thanks.
Stephan
Hope you are right. The link I gave with the J2SE codenames shows a release between the two called dragonfly (which was 1.5.1). That might be out of date though.
Similar Messages
-
___Problems getting Jar Indexing to work___
Hello everyone,
I have an applet that uses my own jar file, along with ~6 other 3rd-party jar files. From what I have read about jar indexing, instead of downloading all these jar files at the start I can have them download when needed. Unfortunately, they all seem to download at the beginning (before the applet runs).
For each of the 3rd party jar files, as well as my own, I ran the command: "jar -i jar_file_name.jar"
Then, when I run the applet I set debug level 5 in the java console so I can see what is being downloaded, etc. I can see all the jar files downloaded in the beginning. Just to be sure, I even added jar files that were NOT used by the applet, and they were even downloaded. So it seems to downloaded all jar files at the beginning, and not when it needs them.
Is there something I missed?Thanks for your continued replies, it is greatly appreciated. Unfortunately, I ran into another problem.
The jar indexing is working and it is only download 1/2 of the jars at startup, because that is what is needed to bring up the initial gui. Now that the gui is up and the user can begin playing around, I want to load in the additional jars in the background.
I tried to kick off the below thread to load in the additional classes from the applet:
Thread loadClass = new Thread() {
public void run() {
System.out.println("Loading classes");
try {
Class.forName("com.package1.class1");
Class.forName("com.package2.class2");
Class.forName("com.package3.class3");
System.out.println("Done loading classes");
catch(ClassNotFoundException e) {
System.out.println("Can't find class: " + e.getMessage());
loadClass.start();So what I am trying to do is load a class from each of the jar files so that it will load in the jar files in the background. Unfortunately this is freezing up the java plugin. The applet just says it is loading and the java console screen turns completely grey.
Am I doing something wrong, or is there a better way to do this? -
Hi All
How can i add jar to my project environment.
Actually what i did was.
Created one folder called "JavaWork" like d:\JavaWork
and put the jar file into this folder and wrote a test class which is importing some classes from the jar file.
how to use jar ? Please someone help me.
Thanks in advance
Shan`man jar`
jar(1) jar(1)
NAME
jar - Java archive tool
SYNOPSIS
jar [ -C ] [ c ] [ f ] [ i ] [ M ] [ m ] [ O ] [ t ] [ u ]
[ v ]
[ x file ] [ manifest-file ] destination input-file
[ input-files ]
DESCRIPTION
The jar tool is a Java application that combines multiple
files into a single JAR archive file. It is also a gen-
eral-purpose archiving and compression tool, based on ZIP
and the ZLIB compression format. However, jar was
designed mainly to facilitate the packaging of Java
applets or applications into a single archive. When the
components of an applet or application (.class files,
images and sounds) are combined into a single archive,
they can be downloaded by a Java agent (like a browser) in
a single HTTP transaction, rather than require a new con-
nection for each piece. This dramatically improves down-
load time. The jar tool also compresses files, which fur-
ther improves download time. In addition, it allows indi-
vidual entries in a file to be signed by the applet author
so that their origins can be authenticated. The syntax
for the jar tool is almost identical to the syntax for the
tar(1) command. A jar archive can be used as a class path
entry, whether or not it is compressed.
The three types of input files for the jar tool are:
o Manifest file (optional)
o Destination jar file
o Files to be archived
Typical usage is:
example% jar cf myjarfile *.class
In this example, all the class files in the current direc-
tory are placed in the file named myjarfile. A manifest
file is automatically generated by the jar tool and is
always the first entry in the jar file. By default, it is
named META-INF/MANIFEST.MF. The manifest file is the
place where any meta-information about the archive is
stored. Refer to the Manifest Format in the SEE ALSO sec-
tion for details about how meta-information is stored in
the manifest file.
To use a pre-existing manifest file to create a new jar
archive, specify the old manifest file with the m option:
example% jar cmf myManifestFile myJarFile *.class
When you specify cfm instead of cmf (that is, you invert
the order of the m and f options), you need to specify the
name of the jar archive first, followed by the name of the
manifest file:
example% jar cfm myJarFile myManifestFile *.class
The manifest uses RFC822 ASCII format, so it is easy to
view and process manifest-file contents.
OPTIONS
The following options are supported:
-C Changes directories during execution of the jar com-
mand. For example:
example% jar uf foo.jar -C classes *
c Creates a new or empty archive on the standard out-
put.
f The second argument specifies a jar file to process.
In the case of creation, this refers to the name of
the jar file to be created (instead of on stdout).
For table or xtract, the second argument identifies
the jar file to be listed or extracted.
i Generates index information for the specified jar
file and its dependent jar files. For example,
example% jar i foo.jar
would generate an INDEX.LIST file in foo.jar which con-
tains location information for each package in foo.jar and
all the jar files specified in foo.jar's Class-Path
attribute.
M Does not create a manifest file for the entries.
m Includes manifest information from specified pre-
existing manifest file. Example use:
example% jar cmf myManifestFile myJarFile *.class
You can add special-purpose name-value attribute
headers to the manifest file that are not contained
in the default manifest. Examples of such headers
are those for vendor information, version informa-
tion, package sealing, and headers to make JAR-bun-
dled applications executable. See the JAR Files
trail in the Java Tutorial and the JRE Notes for
Developers web page for examples of using the m
option.
O Stores only, without using ZIP compression.
t Lists the table of contents from standard output.
u Updates an existing JAR file by adding files or
changing the manifest. For example:
example% jar uf foo.jar foo.class
adds the file foo.class to the existing JAR file
foo.jar, and
example% jar umf foo.jar
updates foo.jar's manifest with the information in
manifest.
v Generates verbose output on stderr.
x file
Extracts all files, or just the named files, from
standard input. If file is omitted, then all files
are extracted; otherwise, only the specified file or
files are extracted.
If any of the files is a directory, then that direc-
tory is processed recursively.
EXAMPLES
To add all of the files in a particular directory to an
archive:
example% ls
0.au 3.au 6.au 9.au at_work.gif
1.au 4.au 7.au Animator.class monkey.jpg
e.au 5.au 8.au Wave.class spacemusic.au
example% jar cvf bundle.jar *
adding: 0.au
adding: 1.au
adding: 2.au
adding: 3.au
adding: 4.au
adding: 5.au
adding: 6.au
adding: 7.au
adding: 8.au
adding: 9.au
adding: Animator.class
adding: Wave.class
adding: at_work.gif
adding: monkey.jpg
adding: spacemusic.au
example%
If you already have subdirectories for images, audio
files, and classes that already exist in an HTML direc-
tory, use jar to archive each directory to a single jar
file:
example% ls
audio classes images
example% jar cvf bundle.jar audio classes images
adding: audio/1.au
adding: audio/2.au
adding: audio/3.au
adding: audio/spacemusic.au
adding: classes/Animator.class
adding: classes/Wave.class
adding: images/monkey.jpg
adding: images/at_work.gif
example% ls -l
total 142
drwxr-xr-x 2 brown green 512 Aug 1 22:33 audio
-rw-r--r-- 1 brown green 68677 Aug 1 22:36 bundle.jar
drwxr-xr-x 2 brown green 512 Aug 1 22:26 classes
drwxr-xr-x 2 brown green 512 Aug 1 22:25 images
example%
To see the entry names in the jar file using the jar tool
and the t option:
example% ls
audio bundle.jar classes images
example% jar tf bundle.jar
META-INF/MANIFEST.MF
audio/1.au
audio/2.au
audio/3.au
audio/spacemusic.au
classes/Animator.class
classes/Wave.class
images/monkey.jpg
images/at_work.gif
example%
To display more information about the files in the
archive, such as their size and last modified date, use
the v option:
example% jar tvf bundle.jar
145 Thu Aug 01 22:27:00 PDT 1996 META-INF/MANIFEST.MF
946 Thu Aug 01 22:24:22 PDT 1996 audio/1.au
1039 Thu Aug 01 22:24:22 PDT 1996 audio/2.au
993 Thu Aug 01 22:24:22 PDT 1996 audio/3.au
48072 Thu Aug 01 22:24:23 PDT 1996 audio/spacemusic.au
16711 Thu Aug 01 22:25:50 PDT 1996 classes/Animator.class
3368 Thu Aug 01 22:26:02 PDT 1996 classes/Wave.class
12809 Thu Aug 01 22:24:48 PDT 1996 images/monkey.jpg
527 Thu Aug 01 22:25:20 PDT 1996 images/at_work.gif
example%
If you bundled a stock trade application (applet) into the
following jar files,
main.jar buy.jar sell.jar other.jar
and you specified the Class-Path attribute in main.jar's
manifest as
Class-Path: buy.jar sell.jar other.jar
then you can use the i option to speed up your applica-
tion's class loading time:
example$ jar i main.jar
An INDEX.LIST file is inserted in the META-INF directory
which will enable the application class loader to download
the right jar files when it is searching for classes or
resources.
SEE ALSO
keytool(1)
JAR Files @
http://java.sun.com/docs/books/tutorial/jar/
JRE Notes @
http://java.sun.com/j2se/1.3/runtime.html#exam-
ple
JAR Guide @
http://java.sun.com/j2se/1.3/docs/guide/jar/index.html
For information on related topics, use the search link @
http://java.sun.com/
13 June 2000 jar(1) -
Any 1 know how to convert a class to jar??
How to convert a class file to jar executable file??
Here's a jar tutorial.
http://java.sun.com/docs/books/tutorial/deployment/jar/index.html -
How to make .jar file for a multiple class program
I have a code for a chat room that contains two folders , one for Server and one for Client
What I need is to create a jar file for the server and a jar file for the clients
but here the first problem , I have a file that named (SocketMessengerConstants.class) that is located outside the two folders and is being read by the two projects .
I mean the server uses it while running and the client uses it too .
the second problem is : I don't know how to create a jar file at all !
please tell me how to do it in detail
Thank youChuckBing wrote:[Packaging Programs in JAR Files|http://java.sun.com/docs/books/tutorial/deployment/jar/index.html]
I tried to read this tutorials before I come here but I couldn't understand it
can you please tell me a specific steps to follow instead of the explaining .. because I understand the explanation but I can't apply it -
hi there
i wanna create a exe file so i am trying to use jar file.
I am new at creating jar files, my application has a main file and other java files, i am using other java files in my main file my concern is can i create a jar file including all the files and when i run jar file i want to complie java files, i really appreciate if anyone can help me out creating a jar file to compile and execute java fileshttp://java.sun.com/j2se/1.4.2/docs/guide/jar/index.html
-
Don't know how to make my main class import a jar file
OK, the title doesn't make much sense but here are my create-jar.bat and manifest files:
create-jar.bat:
jar cvmf manifest.txt dassimul-admin.jar player/ admin/ com/ connector/ common/ *.class
manifest.txt:
Main-Class: admin.DASAdmin
the problem is that in connector/ folder there is the jdbc mysql connector driver (.jar file).
in Eclipse I can add this jar to the Java Build Path, so the program runs.
When I double-click the dassimul-admin.jar file, I get a Class Not Found Exception
C:\MYWORK\dassimul>java -jar dassimul-admin.jar
FATAL ERROR WHILE LOADING SQL DRIVER: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
I think that the problem lies in the fact that admin.DASAdmin can't see and import the jar file in connector/ folder... am I right?It looks like you are putting the mysql jar file inside the dassimul jar. That won't work unless you write custom code. You should use the Class-Path attribute of the manifest to define a relative path(s) to the other jar(s) that you need to use.
[http://java.sun.com/docs/books/tutorial/deployment/jar/index.html] -
"Could not find the main class" when running a jar
Hi, I'm trying to create and run a jar from my application, but I can't figure out how to properly set an entry-point. Looking at the Java Tutorials http://java.sun.com/docs/books/tutorial/deployment/jar/index.html I still can't get it to work.
I have a directory myApp, which contains a directory images and some class files, including mainClass.class. I also have a manifest Manifest.txt in the directory myApp with the following line:
Main-Class: mainClass.class
+ one empty line
I create a jar successfully, while inside the myApp directory, with the following command:
jar cfm myApp.jar Manifest.txt *.class images\*.*
I then proceed to run the jar with the following command:
java -jar myApp.jar
and receive the following error:
Exception in thread "main" java.lang.NoClassDefFoundError: myApp/class
My completely uneducated guess is that there is something wrong with my manifest. The tutorial says that the line should be:
Main-Class: MyPackage.MyClass
I'm assuming that I get the error because I didn't specify a package, which I didn't do because I didn't know what to put there. Do I even have a package?
Can anyone tell me what I've done wrong? thanks.
Message was edited by:
SmurfZGOne problem is you are specifying a file name instead of a class name. It probably should beMain-Class: mainClassA good test is to run your app before jaring it - if you run it with "java mainClass" then the Main-Class attribute must be mainClass.
Also class naming conventions say that class names should start with a capital letter - MainClass for example. It is just a convention, but it is easier to get help when you follow conventions. -
Creating Jar Install for TrialWare
I have a jar executable that i would like users to try as a trial ware. I need to know how to create an installer file that will allow the users to run the program for only one month
Do I need InstallShield ?Reading this will provide you with the knowledge to do that:
http://java.sun.com/docs/books/tutorial/deployment/jar/index.html -
How to load an applet jar file?
Hello everyone,
I have an applet that uses my own jar file and approximately 6 third party jar files. I set up jar indexing (jar -i) which will download the jar files when they are needed. All seems to work well, but now I want to manually load the jar files which I cannot get working.
When the applet starts, about 1/2 of the jar files are downloaded (because they are needed at startup). I then want to load the additional jar files in the background, after the gui is initialized. I have tried this using the below thread which is executed from within the applet's start method:
// Try to load additional jar files in background by loading a class from each jar file.
Thread loadClass = new Thread() {
public void run() {
System.out.println("Loading classes...");
try {
// Tried loading classes this way, doesn't work.
getClass().getClassLoader().loadClass("pkg1.Class1");
getClass().getClassLoader().loadClass("pkg2.Class2");
getClass().getClassLoader().loadClass("pkg3.Class4");
getClass().getClassLoader().loadClass("pkg4.Class4");
/* Loading classes this way doesn't work either.
Class.forName("pkg1.Class1");
Class.forName("pkg2.Class2");
Class.forName("pkg3.Class3");
Class.forName("pkg4.Class4");
catch(ClassNotFoundException e) {
// First attempt to load a class (pkg1.Class1) throws exception.
System.out.println("Can't find class: " + e.getMessage());
loadClass.start();As you can see from above I am trying to load a class from each of the jar files so that the jar files would load into memory/cache. Unfortunately, it cannot find the classes. These are the errors from the java console:
Loading classes...
Loading: pkg1.Class1
Connecting http://my.server.com/my_dir/pkg1/Class1.class with no proxy
Connecting http://my.server.com/my_dir/pkg1/Class1.class with cookie "JSESSIONID=some_big_long_char_list"
Can't find class: pkg1.Class1
So it appears the jar file is not being downloaded. When I take away the dynamic jar loading (removing the "jar -i" & adding them all to the applet archive list) the thread executes correctly. So I know the class names, etc, are correct. How does one load an applet jar file?
Any help/suggestions are appreciated.The above error I posted was because I forgot to index the jar files. That is why it couldn't find the jar file. I thought I was getting farther along with my problem, but I apparently just forgot to index the jars. I am now getting the problem that I got yesterday...
The applet freezes/hangs when it hits the thread. The GUI never opens (even though I'm running this thread right after the gui shows). The java console quits responding and the applet just stays the grey screen. I also tried the invoke later that you suggested.
public void start() {
// ...initialize gui...
// Applet freezes and remains grey, also the java console freezes.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
System.out.println("Loading classes...");
try {
// When I comment out the below forName calls, the thread will still run evidenced through the done print statement.
Class.forName("pkg1.Class1");
Class.forName("pkg2.Class2");
Class.forName("pkg3.Class3");
Class.forName("pkg4.Class4");
System.out.println("...Done loading classes");
catch(Exception e) {
System.out.println("Can't find class: " + e.getMessage());
} -
Loading External JAR librarys in an applet
HI all,
I have an application that I would like to add an excell extention to. The extension is in the form of a JAR file, and I only want my applet to load this jar file when a menu item has ben clicked. I do not want the jar file to be loaded together with the rest of the application, because it is large, and unessisary for normal applet operation. Anyone have an idea how to do this?
Thanks in advance.
-perciousI don't think this is exactly what I am looking for.
I want something that only downloads the .jar file if
the user chooses an option in a menu. That way
normal users will not have to download unessesary
items. I believe indexing will select appropriate
classes from a jar file the first time the applet is
initialized.
-perciousOn the contrary, I believe it is what you want. This is from the first google hit on "jar indexing":
JAR indexing
If an application or applet is bundled into multiple JAR files, the class loader uses a simple linear search algorithm to search each element of the class path, which may entail the class loader downloading and opening many JAR files until the class or resource is found. If the class loader tries to find a nonexistent resource, all the JAR files within the application or applet will have to be downloaded. For large network applications and applets this could result in slow start up, sluggish response, and wasted network bandwidth.
[Since JDK 1.3, the JAR file format has supported indexing to optimize the process of searching for classes in network applications, especially applets. The JarIndex mechanism collects the contents of all the JAR files defined in an applet or application and stores the information in an index file in the first JAR file. [b]After the first JAR file is downloaded, the applet class loader will use the collected content information for efficient downloading of JAR files. This directory information is stored in a simple text file named INDEX.LIST in the META-INF directory of the root JAR file.
http://www-106.ibm.com/developerworks/library/j-jar/ -
Hi all
Is it possible to access a txt file that is in a jar file???
That is , I've created a jar file that contains a txt file, now in my script, I need to access this txt file, is this possible?
Thanks , DaveYes.
See http://java.sun.com/docs/books/tutorial/jar/index.html for the specific details and sample code. -
Calling jar file from jsp - serious problem !
Hi there, I'm trying to call a jar from a jsp file. I need an import clause in my jsp, to the class I want to use.
I'm using eclipse, and while i"m writing "<%= " and the begining of my class name , he autocompletes it and automatically puts an import of my class in the top of the html. It is very convenient , but the problem is that he underling the class name (in the impot: <%@page import="myClass"%>), and I get "The import myClass cannot be resolved" error.
I got an advice to put my class in a package, since it was in a default package. I did it. But now I have 2 problems:
1. I can't run my jar in command window: java - jar myJar.jar. in gives me: Exception in thread "main" java.lang.NoClassDefFoundError....
2. I still get an error - "The import myClass cannot be resolved" in the jsp, although I threw the old jar (that his class I want to use was out of package), and brought a new jar after creating it.
I hope I managed to clarify myself. I'll be thankful of any help !!!Hi MSoldier.
There are two ways to do this:
1) You use the java.lang.Runtime classes to start the java application in your JAR file, just like you would have done it from the command line. The Runtime class has three different exec() methods that can be used to run any program just like you would from the command line. Remember, using this method you will have to write everything just like if you run your Java application from the command line, incl. classpath etc. This way your Java application will be run as a separate process. When the application finishes the process is shutdown and the resources (RAM etc.) taken by it freed, just like when you shutdown any other application.
2) You can open the JAR file yourself from inside the JSP page, look inside the META-INF file to find the main class, and then calls the main class main method. There is an example of how to do this in the Java Tutorial available from Sun under the JAR files track. Check these links :
The Java Tutorial at Sun
http://java.sun.com/docs/books/tutorial/
The JAR File Tutorial at Sun
http://java.sun.com/docs/books/tutorial/jar/index.html
Opening JAR Files via the Java JAR File API
http://java.sun.com/docs/books/tutorial/jar/api/index.html
Note however, if you have just created some classes that you want to use from inside your JSP pages, and not a separate application that needs to be run separately, you should just include the JAR file with your custom classes inside the WEB-INF/lib directory. These classes are then automatically available to your JSP pages, just like the rest of the Java API.
I hope this answers your questions,
Kind Regards,
Jakob Jenkov
Software Architect
Jenkov Development
www.jenkov.com -
Bundling all java,html and even images in a jar file
Hi All,
When i bundle all my application .java files in a jar along with manifest i give something as,
jar -cvf Name.jar manifest.txt *.classMy question is if i want to bundle even couple of HTML and even some images like(jpg,png..etc)..How should i do that???
Thanks in advance.
regards,
ViswanadhFollow the instructions here:
[http://java.sun.com/docs/books/tutorial/deployment/jar/index.html]
Note that if you want to run the html. it must be outside of the jar, not in it. -
Where is the jar and how to use my jar?
when we use a java class, i.e. Applet.class, we need to import it into our code, i know Applet.class is in a jar file under java home directory, but what the jar file's name is and where exactly it is?
if i have a classs MyClass.class packaged in pack0.pack1, how to change it to a jar file? i mean, i should zip directory pack0 into pack0.jar?
thxNo idea why you would want to know, and its now necessary to know, but those classes should be in your <jdkFolder>\jre\lib\rt.jar
For information on jaring, see http://java.sun.com/docs/books/tutorial/jar/index.html
Maybe you are looking for
-
Now, I've tried all the steps on http://support.apple.com/kb/TS1440?viewlocale=en_US When I hold down the option key, all that shows is the mouse arrow, nothing else. When I try the disk utility idea, I'm unable to press the repair disk option, the o
-
I have two macbook pro computers. My external HD was reformatted on one of them from a PC to MAC. It shows up just fine on this macbook. The other macbook, I cannot find it. Ive tried in disk utility and Ive tried to see if it was hidden. Cannot
-
I have a question regarding Company consolidation. I have five company codes each using the same Chart of account. Now I want to do the consolidation of company codes. How do I go about it ? Please advise the best method. Can I use the group chart
-
Error in visual administrator while implementing Spnego authentication sche
hi, i have under gone all thease steps. for implementation of SPnego sceme on my portal. >downloaded SPnego wizad file from note specified. >unziped it and got .ear files >deployed those .ear files on my server. >now went for service user J2ee config
-
How do I migrate Lightroom 4 onto my new iMac from old laptop?
I have just purchased a new iMac, and would like to use my version of Lightroom 4 which I have been using on my old laptop. Can I just download it from adobe.com on the new machine and then use my previous serial number to activate it? Is there an