JAD (file format) Java application descriptor File extension: .jad MIME type:
text/vnd.sun.j2me.appdescriptor
Developed by: Java Type of format: description Standard(s):
Java application
Java Application Descriptor (JAD) files describe the MIDlets (Java ME applications) that are distributed as JAR files. JAD files take the following format: MIDlet-1: <Application name>,
, <midlet class> MIDlet-Jar-Size: <Size in bytes> MIDlet-Jar-URL: MIDlet-Name: <Application name> MIDlet-Vendor: MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.0 <MIDP version> JAD files are commonly used to package Java applications or games that can be downloaded to mobile phones. Java applications enable Mobile phones to interact programmatically with online web services, such as the ability to send SMS messages via GSM mobile internet or interact in multiplayer games.
JAR (file format) Java Archive
File extension: MIME type:
.jar application/java-archive
Uniform Type Identifier: com.sun.java-archive Developed by:
Sun Microsystems
Type of format:
file archive, data compression
Extended from:
ZIP
In computing, a JAR file (or Java ARchive) is used to distribute a set of Java classes. It is used to store compiled Java classes and associated metadata that can constitute a program. •
• •
WAR (file format) (Web Application aRchive) files are also Java archives which store XML files, java classes, Java Server Pages and other objects for Web Applications. EAR (file format) (Enterprise ARchive) files are also Java archives which store XML files, java classes and other objects for Enterprise Applications. RAR (file format) (Resource Adapter aRchive) files are also Java archives which store XML files, java classes and other objects for J2EE Connector Architecture (JCA) applications.
JAR files can be created and extracted using the "jar" command that comes with the JDK. It can be done using zip tools, but as WinZip has a habit of renaming all-uppercase directories and files in lower case, this can raise support calls with whoever created the JAR or the tool authors themselves. WinRAR, on the other hand, retains the original case of filenames. A JAR file has a manifest file located in the path META-INF/MANIFEST.MF. The entries in the manifest file determine how the JAR file will be used. JAR files which are intended to be executed as standalone programs will have one of their classes specified as the "main" class. The manifest file would have an entry such as
Main-Class: myPrograms.MyClass
Such JAR files are typically started with a command similar to java -jar foo.jar
These files can also include a Classpath entry, which identifies other JAR files to be loaded with the JAR. This entry consists of a list of absolute or relative paths to other JAR files. Although intended to simplify JAR use, in practice, it turns out to be notoriously brittle as it depends on all the relevant JARs being in the exact locations specified when the entry-point JAR was built. To change versions or locations of libraries, a new manifest is needed. A JAR file can be digitally signed. If so, the signature information is added to the manifest file. The JAR itself is not signed, but instead every file inside the archive is listed along with its checksum; it is these checksums that are signed. Multiple entities may sign the JAR file, changing the JAR file itself with each signing -but the signed files themselves remain valid. When the Java runtime loads signed JAR files, it can validate the signatures and refuse to load classes that do not match the signature. It can also support 'sealed' packages, in which the classloader will only permit Java classes to be loaded into the same package if they are all signed by the same entities. This prevents malicious code from being inserted into an existing package, and so gain access to package-scoped classes and data. JAR files can be obfuscated so that a user of the JAR file doesn't get much information regarding the code it contains, or to reduce its size, which is useful in mobile phone applications. For those Microsoft Windows users who prefer having Windows EXE files, tools such as JSmooth or Launch4J can be used to wrap JAR files into executables. Eclipse uses a small EXE launcher (eclipse.exe) to display the splash screen on startup and launch the application from the main JAR (startup.jar).
Contents [hide] • • • •
1 GNU jar or fastjar 2 Apache Ant Zip/JAR support 3 Problems with the JAR format 4 See also
•
5 External links
GNU jar or fastjar The GNU Project has implemented the jar command by a program written in C. This variant claims to be much faster than the original Sun Microsystems jar program (written in the Java programming language). GNU jar is released under GNU General Public License (GPL). There is not much documentation around for this utility. GNU Project has this brief introduction. However, this is the jar version distributed with many Linux distributions and also with Cygwin for windows.
Apache Ant Zip/JAR support The Apache Ant build tool has its own package to read and write the Zip and JAR archives, including support for the Unix filesystem extensions. The org.apache.tools.zip package is released under the Apache Software Foundation license and is designed to be usable outside Ant. This code is fast and widely used. It creates most JAR files that are not created with Sun's utility, so could be considered fairly mature.
Problems with the JAR format The Ant team find that most of their support calls related to JAR file creation have two underlying causes. •
The first is manifest creation, specifically how long lines in the manifest are wrapped. This is a complex and somewhat ambiguous part of the specification. Ant wraps long lines at 68 characters and continues on the following line with a space at the front to indicate a continuation. This is viewed as erroneous by people that have not read the specification in detail and believe that the classpath should be split at a file boundary, instead of partly across a file name. Unfortunately, if that is done, the Java runtime does not detect a split line as the first line ends before the 68 character boundary.
•
The second is WinZip converting upper-case files and directories to lower case. If a user views the contents of a JAR file using WinZip, a file such as MANIFEST/MANIFEST.MF is converted to manifest/manifest.mf. Some mobile phone Java runtimes appear to parse the manifest in ways that are incompatible with the specification, and require a strict ordering of entries in the manifest. They also do not implement the line wrapping algorithm correctly. This may imply a problem in the test suite for the J2ME mobile java runtime