Jars within Jar

Hello All,
I have written a custom ant task and have made a jar and placed it in Ant's lib directory. The jar file has some dependencies which are jar files them selves (jdom.jar,commons-lang.jar and javagit.jar to be exact). It also has a dependency on ant.jar but I have not included that in the application's jar file.When I execute the custom ant task, I get an error "ClassNotFoundException" for classes that are being used in the Custom Ant Task class (except for Classes in ant.jar).When I extract the dependencies and then create a jar file (no jars within the jar file), it works fine !
Here is the METAINF file when the dependencies are extracted
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 11.0-b15 (Sun Microsystems Inc.)
Class-Path: . (in case of jars --> jdom.jar javagit.jar commons-lang.jar)
1. How come I am not getting any errors for classes in ant.jar ?
2. Can any one kindly explain why the JRE can't find the files from with in the dependencies as jar files as opposed to dependencies as extracted files ?
3. Is there a way to create a jar file with dependencies as jar files and how to configure it so that the runtime can find the files from within the jar files ?
Waiting for a favorable response.
Kind Regards.

Put the dependency jars file in to "C:\pogram Files\Jre1.6/lib/ext folder.It will load automatically during execution

Similar Messages

  • Relationship of Jar within Jar

    I have a project that uses kxlm2.
    To this point in development I have included the source for kxml2 in my project hierarchy and compiled it along with my code, packaged it, ran/tested it, etc. Everything works.
    However, I don't want to compile KXML2; I just want to include the kxml2.jar distro in my projects JAR file and be able to use it from my classes.
    Is this as simple as including kxml2.jar in my jar or do I need to add it to the manifest? Do I need to explicitly load kxml2.jar within my app or does this happen magically?
    Can someone please put me on the path to enlightenment. In the mean time I will continue to dig through the docs.
    Thanks.

    Java's standard classloaders will not load classes from a jar that is itself within another jar.
    You can write a custom classloader to do that, or use a 3rd-party product (one is OneJar), or just use the kxml2 jar from your jar by adding a ClassPath: parameter to your jar's manifest file. Refer to Java's jar specification for information on the last option.

  • Jar within Jar

    If I have a program that uses another Jar file can I put the jar file into the jar file of my application and will it be in the classpath because it is in the jar or how can I go about doing that?

    It is NOT possible to use an embeded jar file from classes of the outer jar file. The URLClassLoader, which is used to search .jar files, does not have the functionality to search embeded .jar files as well. Unfortanately there are two "ugly" choices. Either you unjar the jar file so that the embeded .jar files are now on disk, or you write a custom classloader that can search embeded .jar files at runtime. The first is not much different than packaging everything into a .zip file and enforcing the entire program be unzipped before it can be used. This is probably the best way to go for most cases. The latter, a custom loader, is difficult. In my plugin engine, we actually do have our custom plugin loader do this. Each .par file (Plugin ARchive, but identical to a .jar/.zip file), can embed other .jar/.zip files. Anything found in the /lib dir of the .par file is automatically handled by our custom loader code. Basically, when a .class is being looked for, it tries the main .par file /classes dir first. If it is not there, it then tries any embeded .jar/.zip file found in the /lib dir. Along the way we "index" package names so future lookups within embeded jar/zip files are much faster.
    There is a caveat to this though. Any code in an embeded jar/zip may do something like getClass().getResource(), or getClass().getClassLoader().getResource(). Problem is, getClass().getResource() should work on the embeded jar/zip file, not the outer par file. It took a bit of time, but our plugin engine is now able to read .class files out of any embeded jar/zip file, and it properly handles the getResource() call as well, looking in the embeded jar/zip if the call is made from a class inside an embeded jar/zip. This allows a plugin to package everything up into a single .par file and distribute it without it having to be unzipped.
    Why the URLClassLoader does NOT add this functionality is beyond me. It is really a bad design that you specify a manifest.mf file, class-path files in the .jar, but there is NO documentation explaining that you need the embeded jar/zip files to be unzipped to the disk for them to be used. The bit of code we did could easily be added to URLClassLoader to handle this situation and would prevent the numerous threads on this topic. Why the Sun team doesn't do this is beyond me!

  • Loading applet for a jar within an ear

    Hi,
    Apologies if my question sounds ignorant, this is the first time i'm playing with applets.
    I'm trying to load an applet from a JAR (applet.jar) which contains all the files specific to the applet. The applet.jar resides within an ear (application.ear) which is deployed on JBoss.
    The applet related stuff is in the package com.dms.applet (which makes up the applet.jar)
    My index.html resides in a war file (webapp.war), which essentially contains a bunch of servlets. Index.html is a two frame page, which tries to load the applet in one frame and a servlet in another (servlets work fine).
    My <APPLET> tag for the frame in which the applet is displayed (is another html file - applet.html) looks something like this:
    <html><body>
    <APPLET
         code="com.dms.applet.NavigationApplet.class"
         codebase=./"
         archive="applet.jar, application.ear"
         width=200
         height=500
    >
    </APPLET></body></html>
    however, the applet always fails to load, i get the following exception when i open the java console:
    java.lang.ClassNotFoundException:
    com.dms.applet.NavigationApplet.class
         at sun.applet.AppletClassLoader.findClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadCode(Unknown Source)
         at sun.applet.AppletPanel.createApplet(Unknown Source)
         at sun.plugin.AppletViewer.createApplet(Unknown Source)
         at sun.applet.AppletPanel.runLoader(Unknown Source)
         at sun.applet.AppletPanel.run(Unknown Source)
         at java.lang.Thread.run(Unknown Source)
    Caused by: java.io.IOException: open HTTP connection failed.
         at sun.applet.AppletClassLoader.getBytes(Unknown Source)
         at sun.applet.AppletClassLoader.access$100(Unknown Source)
         at sun.applet.AppletClassLoader$1.run(Unknown Source)
         at java.security.AccessController.doPrivileged(Native Method)
         ... 10 more
    load: class com.dms.applet.NavigationApplet.class not found.
    java.lang.ClassNotFoundException:
    com.dms.applet.NavigationApplet.class
         at sun.applet.AppletClassLoader.findClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadCode(Unknown Source)
         at sun.applet.AppletPanel.createApplet(Unknown Source)
         at sun.plugin.AppletViewer.createApplet(Unknown Source)
         at sun.applet.AppletPanel.runLoader(Unknown Source)
         at sun.applet.AppletPanel.run(Unknown Source)
         at java.lang.Thread.run(Unknown Source)
    Caused by: java.io.IOException: open HTTP connection failed.
         at sun.applet.AppletClassLoader.getBytes(Unknown Source)
         at sun.applet.AppletClassLoader.access$100(Unknown Source)
         at sun.applet.AppletClassLoader$1.run(Unknown Source)
         at java.security.AccessController.doPrivileged(Native Method)
         ... 10 more
    It seems evident that the applet class loader can't find my applet.class and hence can't load it. I guess that its something wrong with my <APPLET> tag, but can't quite seem to get my finger on it. Do i need to explicitly tell the class loader to look for it in the applet.jar which is in the applicatin.ear?
    Any help would be very much appreciated.
    Thanks in advance
    EnterpriseJavaBones

    Hi,
    I managed to fix this problem. For those who mite come across the same issue in the future, this is how i did it.
    I put the applets code in the war file under an applet dir. That the the index.html is in the root (of the war dir) and the applets code is in a /applet dir.
    Hence the codebase simply reads, codebase="applet/"
    Cheers
    EnterpriseJavaBones

  • Deploying Java apps: Jars within a jar

    Dear Java gurus,
    Imagine I have a Java application. I wish to bundle it all within a jar file. The problem is, I also wish to add some dependencies, in the shape of a couple of other jars. This means that the user could run the app using the straight-forward "java -jar myapp.jar" command.
    So, I jar it all up. This Jar contains a MANIFEST.MF that specifies the main class, and also the classpath. ("Class-Path: lib/other.jar") as the extra jars were in a dir called lib within the jar.
    But, this doesn't work run as java complains about not being able to resolve classes that exist within other.jar.
    I have yet to find anything on the net beyond really basic examples of using jar. Anyone had more experience with it and can share some tips?

    Its a horrible thing. Basically, you can't include jars in jars.  I asked this question on the Java.sun.com forums a while ago if you want to search there. Its a common question and pisses people off.
    You have some other options:
    1: extract all dependency jars and include the classes in a single jar file.
    2: distribute multiple jars and set the Class-Path in the Manifest to point to them. Since you're pointing at lib/other.jar, you gotta use:
    myjar.jar
    lib/other.jar
    You won't find another way around this. I recall somebody suggesting that packaging jars with jars should be available in mustang, but as of yet, it is not so.
    Also, I would strongly recommend starting to use Java Webstart /JNLP for distributing java apps. I've never done it, but it takes all this hassle out for you by automatically maintaining dependencies. I'm intending to try to get Ensmer going using JNLP sometime.
    Dusty

  • Invoking JAR within an EAR

    I am having trouble invoking my project which is packaged in a jar and the jar is then packaged in an ear file.
    I need to deploy this big ear file onto an AIX server. No single jar file can be deployed onto the server so I have no option but to include my batch project into the ear file, however, when I try to invoke my main within this jar (within the ear), the class can't be found! Can anyone help me with this? Thanks!

    oh also I forgot to mention that I am invoking my program via shell script.
    My script invokes the main function, so my first problem is not being able to 'see' that main function in my ear.I did, however, defined my ear file inside the classpath and used the classpath option when calling my programs. Thanks!

  • Run from within JAR

    I have a java program which runs an external executable. I would like to include this executable in my jar file and have my program be able to find it. Basically I want to be able to say: java -jar MyProgram.jar and not have to have the external executable outside of the jar.
    I've tried just putting the exe in the jar, but that doens't seem to be doing the trick. Any ideas?
    Thanks.

    runs an external executableI assume that you are using Runtime exec() to run the program.
    Does your OS know how to find and execute a program that is within a jar file? If it has a syntax for that, then use that syntax. Otherwise you need to have the executable where the OS can find it. On some PATH.

  • Static method to read text file within JAR.

    I've a small problem. I've got my JAR file stuff working great, so I thought I'd give a go to running it via WebStart. Through a little research, I've found that if you're distributing your application via WebStart, you need to pack up everything in a JAR file. This is no problem for the JDBC drivers, because its already in a JAR, so I should be able to distribute that fine.
    I've managed to digitally sign my application JAR and have a preliminary (i.e. untested) JNLP file set up.
    My problem is, my application gets its available data sources from an external text file. I've already written my own file I/O class which I use in my "commonfiles" package to read in a text file and return it as an array with each element holding a line from the text file. This class is basically just a bunch of static methods.
    So instead of rewriting this, I thought I'd just add a boolean flag to this method to state whether to load this file from the external file system or the JAR file. I've found out that to load a text file from within the JAR you have to use something like: -
    String str = (this.getClass().getResource("/myData.txt")).getFile();
    java.io.File fil = new java.io.File(str);
    java.io.FileReader fr = new java.io.FileReader (fil);
    java.io.BufferedReader bin = new java.io.BufferedReader (fr) ;The sticking point is that my method (ReturnFileAsArray()) is declared as static, because my own FileIO class is just a bunch of static methods to do file I/O stuff. Therefore, I can't use the above method because of the instance variable "this" (I assume).
    Is there any way I can load an included text file as above without having to declare my method as an instance method? I guess I could write a seperate class to do this for my commonfiles package, but I'd rather not if possible.
    Any ideas?

    Don't put a "flag" and code different ways to read files depending on whether it's in a JAR or not. Just use
    the getResource/getResourceAsStream API regardless. Hmmm.....so that will load it from either place depending on the situation? I keep getting a NullPointerException doing that, on this line: -
    String strFileName = (FileIO.class.getResource(fileName)).getFile();...although I've only tried it using the external local filesystem file (in the same directory) as I've not really finished setting up my WebStart stuff yet.
    Here is the method in question...
    public static String[] ReadFileAsArray(String dirName, String fileName, boolean bFromJAR) {
            String[] resultStringArray = null;
            StringBuffer strBuffer = null;
            StringTokenizer strTokenizer = null;
            FileReader fReader = null;
            BufferedReader bReader = null;
            int iElementCount = 0;
            if ((dirName.length() < 1) || (fileName.length() < 1)) {
                // Null parameters found. Failure.
                return null;
            } else {
                // Parameters correct, continue.
                try {
                    // Read the file contents and convert to String array.
                    //if (bFromJAR) {
                        // Open file from within JAR file.
                        String strFileName = (FileIO.class.getResource(fileName)).getFile();
                        File jarFile = new File(strFileName);
                        fReader = new FileReader(jarFile);
                    //} else {
                        // Open from local filesystem.
                    //    fReader = new FileReader(dirName + File.separator + fileName);
                    bReader = new BufferedReader(fReader);
                    strBuffer = new StringBuffer();
                    while (bReader.ready()) {
                        strBuffer.append(bReader.readLine() + "%%");
                    strTokenizer = new StringTokenizer(strBuffer.toString(), "%%");
                    resultStringArray = new String[strTokenizer.countTokens()];
                    while ((strTokenizer.hasMoreTokens()) && (iElementCount < resultStringArray.length)) {
                        resultStringArray[iElementCount++] = strTokenizer.nextToken();
                    bReader.close();
                    return resultStringArray;
                } catch (IOException e) {
                    return null;
        }I'm calling it using: -
    // Load the external file into a String array, one row for each element.
    String[] fileArray = FileIO.ReadFileAsArray(System.getProperty("user.dir"), "datasources.dat", true);Cheers on any info on this.

  • Is it possible to open a Jar within Java code

    Hey
    I am just wondering if it is at all possible to get java to run a Jar within the code. So the Jar is my update to my program and I have got it downloading from my site using the java code but now i want the code to open it for the user so they don't have to double click in on. Is this possible?
    Thanks

    Sure. The java.util.jar package.
    You might want to take a look at service providers:
    http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html#Service%20Provider

  • Error while using FJTable.jar & SwingButton.jar files in a same form

    Hi Experts,
    I am using forms 10.1.2 with Java Plug-in 1.6.0_02
    I have downloaded FJTable.jar & SwingButton.jar files from http://forms.pjc.bean.over-blog.com site. When I am using both files in one form, it shows error :
    java.lang.SecurityException: class "oracle.forms.fd.SwingButton"'s signer information does not match signer information of other classes in the same package”
    If anybody has any idea about this please help me
    Thanks
    Kalpesh

    Hello,
    You cannot run one form that contains more than one Beans that have not the same signature.
    Sign both the JAR files and everything is going to be OK ;D
    Francois

  • Adding a jar to the classpath of an executable jar (mixing -jar and -cp)

    Hello,
    frankly I hesitated over posting this to "New to Java"; my apologies (but also, eternal gratefulness) if there is an ultra-simple answer I have overlooked...
    I integrate a black-box app (I'm not supposed to have the source) that comes packaged as an executable jar (with a Manifest.MF that specifies the main class and a bunch of dependent jars), along with a few dependent jars and a startup script. Long story short, the application code supports adding jars in the classpath, but I can't find a painless way to add a jar in its "classpath".
    The app's "vendor" (another department of my customer company) has a slow turnaround on support requests, so while waiting for their suggestion as to how exactly to integrate custom jars, I'm trying to find a solution at the pure Java level.
    The startup script features a "just run the jar" launch line:
    java -jar startup.jarI tried tweaking this line to add a custom jar in the classpath
    java -cp mycustomclasses.jar -jar startup.jarBut that didn't seem to work ( NoClassDefFound at the point where the extension class is supposed to be loaded).
    I tried various combination of order, -cp/-classpath, using the CLASSPATH environment variable,... and eventually gave up and devised a manual launch line, which obviously worked:
    java -cp startup.jar;dependency1.jar;dependency2.jar;mycustomclasses.jar fully.qualified.name.of.StartupClassI resent this approach though, which not only makes me have to know the main class of the app, but also forces me to specify all the dependencies explicitly (the whole content of the Manifest's class-path entry).
    I'm surprised there isn't another approach: really, can't I mix -jar and -cp options?
    - [url http://download.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html]This document (apparently a bible on the CLASSPATH), pointed out by a repited forum member recently, does not document the -jar option.
    - the [url http://download.oracle.com/javase/tutorial/deployment/jar/run.html]Java tutorial describes how to use the -jar option, but does not mention how it could play along with -cp
    Thanks in advance, and best regards,
    J.
    Edited by: jduprez on Dec 7, 2010 11:35 PM
    Ahem, the "Java application launcher" page bundled with the JDK doc (http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html) specifies that +When you use [the -jar] option, the JAR file is the source of all user classes, and other user class path settings are ignored+
    So this behavior is deliberate indeed... my chances diminish to find a way around other than specifying the full classpath and main class...

    I would have thought that the main-class attribute of the JAR you name in the -jar option is the one that is executed.Then I still have the burden of copying that from the initial startup.jar's manifest. Slightly less annoying than copying the whole Class-path entry, but it's an impediment to integrating it as a "black-box".
    The 'cascading' behavior is implicit in the specification
    I know at least one regular in addition to me that would issue some irony about putting those terms together :o)
    Anyway, thank you for confirming the original issue, and merci beaucoup for your handy "wrapper" trick.
    I'll revisit the post markers once I've actually tried it.
    Best regards,
    Jérôme

  • Error while running (java -jar orion.jar -install)  Need yr help ?

    Hi,
    I have
    Win 2000 Professional
    Oracle 9i release 1and have the Pre-Requisites of MapViewer as follows.
    OC4J_extended (Pre-Requisite for MapViewer)
    XML Parser (Built-in OC4J)
    Oracle 9iI don't know whether I have Oracle Client or not which is also pre-requisite for MapViewer ? I think it is built-in with any of the above... most probably with Oracle 9i !!!
    I have JDK1.3 as wellI have Oracle9iAS release 1.0.2.2.2a, but I don't want to use it, as I have OC4J standalone...
    I want to have the configuration, for using Oracle Spatial/MapViewer.... How can I do that ? I need steps/procedure...
    I am having problems in configuring OC4J which I have downloaded. I have unzipped OC4J_Extended in Oracle 9i Database home directory (not in Oracle 9iAS home directory... because I dont have installed iAS)
    Its installation guide asks for installation through the following command
    java -jar orion.jar -installbut after unzip, I don't get any file named "orion.jar"
    What should I do ? Where am wrong ? Should I have to use 9iAS for using MapViewer in any case, if so which version ? I need the heirarchy of steps ?
    I m really stucked !!!
    Any help would be highly appreciated.
    Thanx
    Zaaf.

    Hi,
    If you are just using OC4J, you should only need to do:
    java -jar oc4j.jar -install
    Also note that you should not install oc4j in the oracle_home
    directory. If/when you upgrade oracle to apply patches, etc
    it will overwrite/cause problems with your oc4j install if you
    put it in the oracle_home directory. Put it in any other directory.
    The only part of Oracle9iAS needed to run mapviewer is oc4j.
    After that is installed, then follow the instructions in the MapViewer
    User's Guide (available on OTN).

  • Getting error while running command java -jar oc4j.jar -install

    java -jar oc4j.jar -install
    ON RUNNING The above command getting below error , is it because Java home is not set?
    Warning: -jar not understood. Ignoring.
    Exception in thread "main" java.lang.NoClassDefFoundError: oc4j.jar
    at gnu.gcj.runtime.FirstThread.run() (/usr/lib/libgcj.so.5.0.0)
    at JvThreadRun(java.lang.Thread) (/usr/lib/libgcj.so.5.0.0)
    at JvRunMain(java.lang.Class, byte const, int, byte const, boolean) (/usr/lib/libgcj.so.5.0.0)
    at __gcj_personality_v0 (/oracle/u01/app/oracle/product/10.2.0/db_1/oc4j/j2ee/home/java.version=1.4.2)
    at __libc_start_main (/lib/tls/libc-2.3.4.so)
    at JvRegisterClasses (/oracle/u01/app/oracle/product/10.2.0/db_1/oc4j/j2ee/home/java.version=1.4.2)
    navisdb.igglobal.com(express)$ javac
    ksh: javac: not found
    ENVIORNMENT DETAIL : RED HAT LINUX ENTERPRISE EDITION
    Extracted OC4J_extended.zip file at oracle 10g installation location.

    does this command work?
    /home/oracle:MCSE>gij --showversion
    gij (GNU libgcj) version 3.4.6 20060404 (Red Hat 3.4.6-11)

  • Java -jar application.jar not finding file?

    I have an application program that contains the
    following two lines of code:
    FileInputStream sf = new FileInputStream "CustomWorld.ini");
    settings.load(sf);
    and when I run it as:
    java application
    it runs fine but if I run it as:
    java -jar -classpath .;application.jar application.jar
    it can't find the "CustomWorld.ini" file. Why is that
    and how can I fix it?
    Many thanks for your help.
    PS: to create the jar file I used:
    jar -cvfm application.jar application.mf application.class CustomWorld.ini

    Once your CustomWorld.ini file is in the jar, you can no longer access it directly with a FileReader. JDK 1.1 included resource locators to java.lang.Class...
    URL url = application.class.getResource("/CustomWorld.ini");
    if (url != null) { // resource was found
       InputStream in = url.openStream();
       settings.load(in);
    } else {
       // fail gracefully or use defaults
    }Note that the CustomWorld.ini file will need to be in the classpath or the root folder of the jar file for this to work.
    Regards,
    -Troy

  • Java -jar OrgFormatter.jar

    Hi All,
    I'm very new to Java. I'm trying to run this jar file and getting following error.
    java -jar OrgFormatter.jar VarshaTest060404.txt varshatest
    Failed to load Main-Class manifest attribute from OrgFormatter.jar
    OrgFormatter file takes two arguments <input file> and <output file>
    Please help me here.
    Thanks much
    Var

    if it doesn't work( the think is about the creating manifest file) you should study on the manifest files. I am wathching this topic

Maybe you are looking for

  • LabView Run-Time Engine 2009 installation failure

    Hi, I have problem to install Labview Run-Time Engine 2009. This error occur: Die Installation von NI VC2008MSMs x86 ist auf Grund des folgenden Fehlers fehlgeschlagen. Auf den Windows-Installationsdienst konnte nicht zugegriffen werden. Die kann vor

  • Passing prompt value to a LiveOffice document

    Hi all, I've SAP BW Query as the data source having two prompts of one which is date, and I built a LiveOffice document connecting a WebI report. The prompt values in LiveOffice document are displayed as for ex : comp code : 2000 [0COMPCODE].[2000] a

  • Mysterious but clever facility on Macbook rotating photos for display.

    I have a question that has puzzled me for days and I can't find out how or why the Macbook does this. I took a photo on my digi camera in "Portrait" orientation or mode in other words I turned the camera sideways on to take a photo of a tall building

  • DBMS_DATAPUMP - how to simulate commit=N ?

    Hi, I am writing a PL/SQL procedure to export/import data from any database. Concerning the import part, how to simulate using DBMS_DATAPUMP api the command line option COMMIT=N? Our environment is Oracle 10.2.4 EE. Thanks for your help, Cyryl

  • HT4007 Aperture is Slow - What do I do?

    Almost everything I do in Aperture is slow and it's gotten worse over time.  This doesn't happen with other applications it's specific to Aperture. Clicking the import tab takes several seconds. Clicking to a project causes a beach ball My library is