Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Do common JARs have to be repeated across WARs in an EAR?

I have a JAR file for authorization. I need it for each of my WAR files. All the WAR files are packaged in an EAR file. Do I have to repeat this common JAR in every WAR, or is there a structure for common libraries?

So my example looks something like this...

big.ear
  - META-INF
    - MANIFEST.MF
    - application.xml
  - appl1.war
    - META-INF
      - MANIFEST.MF
    - WEB-INF
      - web.xml
      - lib
        - unique1.jar
        - unique2.jar
        - unique3.jar
        - common1.jar
    - jsps/html/etc
  - appl2.war
    - META-INF
      - MANIFEST.MF
    - WEB-INF
      - web.xml
      - lib
        - unique3.jar
        - unique4.jar
        - common1.jar
    - jsps/html/etc
  - appl3.war
    - META-INF
      - MANIFEST.MF
    - WEB-INF
      - web.xml
      - lib
        - unique5.jar
        - common1.jar
    - jsps/html/etc

Each of my WAR applications can see common1.jar, but it is in the EAR three times.

Where in the EAR structure could I put common1.jar so that appl1, appl2, and appl3 could see it without repeating it three times?

like image 229
dacracot Avatar asked Jan 16 '09 16:01

dacracot


2 Answers

The standard way is to put the JARs at the root of your EAR and reference them in the Class-Path attribute of the WARs' META-INF/MANIFEST.MF. See this article.

Check your container's documentation to make sure it is supported.

like image 147
Olivier Avatar answered Oct 22 '22 20:10

Olivier


It’s in the JEE5 spec, chapter EE 8.2.1:

A .ear file may contain a directory that contains libraries packaged in JAR files. The library-directory element of the .ear file’s deployment descriptor contains the name of this directory. If a library-directory element isn’t specified, or if the .ear file does not contain a deployment descriptor, the directory named lib is used.

like image 37
Strinder Avatar answered Oct 22 '22 19:10

Strinder