dev@glassfish.java.net

Re: MANIFEST.MF problems in Maven and OSGi packaging, naming and versioning rules

From: Richard S. Hall <heavy_at_ungoverned.org>
Date: Thu, 21 Jul 2011 13:34:53 -0400

On 7/21/11 1:23 PM, Ed Burns wrote:
> Hello Team,
>
> While sitting down to fix task JAVASERVERFACES-2028 in earnest, I
> discovered some issues with the official jars on which JSF depends.
>
> JSF Depends on the following artifacts:
>
> <dependencies>
> <dependency>
> <groupId>javax.servlet</groupId>
> <artifactId>javax.servlet-api</artifactId>
> <version>3.0.1</version>
> <scope>provided</scope>
> </dependency>
> <dependency>
> <groupId>javax.servlet.jsp</groupId>
> <artifactId>javax.servlet.jsp-api</artifactId>
> <version>2.2.1</version>
> <scope>provided</scope>
> </dependency>
> <dependency>
> <groupId>javax.el</groupId>
> <artifactId>javax.el-api</artifactId>
> <version>2.2.1</version>
> <scope>provided</scope>
> </dependency>
> <dependency>
> <groupId>javax.servlet.jsp.jstl</groupId>
> <artifactId>jstl-api</artifactId>
> <version>1.2</version>
> <scope>provided</scope>
> </dependency>
> </dependencies>
>
> I have verified these are in maven central, and the staging area
> <https://maven.java.net/content/repositories/releases/> as well.
>
> I have discovered some problems with the OSGi metadata in these jars,
> with the first one being a showstopper for me completing the work for
> JSF.
>
> SECTION: jstl-api-1.2.jar
>
> EB> URGENT: The MANIFEST.MF for this jar is completely missing the
> EB> required metadata. In fact, the manifest is nearly empty:
>
> Manifest-Version: 1.0
>
> Archiver-Version: Plexus Archiver
>
> Created-By: Apache Maven
>
> Built-By: janey
>
> Build-Jdk: 1.6.0_17
>
>
>
> EB> Also, the jar name itself does not conform to the Maven and OSGi
> EB> packaging, naming, and versioning rules. All the other jars on
> EB> which JSF depends start with "javax." but the JSTL jar does not.
>
> SECTION: javax.el-api-2.2.1.jar
>
> Export-Package: javax.el;version="2.2.1"
> Import-Package: javax.el;version="2.2.1"
>
> EB> Why are we exporting and importing the same thing?

This is likely unnecessary if the bundle is purely providing a library.

>
> Bundle-License: https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html
>
> EB> I believe this should be
> EB> http://glassfish.java.net/nonav/public/CDDL+GPL.html
>
> Bundle-Description: Java.net - The Source for Java Technology Collabor
> ation
>
> EB> I think this should be a real description.
>
> Bundle-DocURL: http://glassfish.org
>
> EB> Shouldn't this be the pointer to the API javadocs?
>
> SECTION: javax.servlet-api-3.0.1.jar
>
> Export-Package: javax.servlet;uses:="javax.servlet.descriptor,javax.se
> rvlet.annotation";version="3.0",javax.servlet.descriptor;version="3.0
> ",javax.servlet.annotation;uses:="javax.servlet";version="3.0",javax.
> servlet.http;uses:="javax.servlet";version="3.0"
>
> EB> Shouldn't the exported versions be 3.0.1, to match the maven version
> EB> of the artifact, and, indeed, the OSGi Bundle-version?

Bundle version and package version are not necessarily the same thing,
although it is possible to use such an approach. Doing so usually
results in less meaningful package version numbers, though.

>
> Bundle-License: https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html
> Bundle-Description: Java.net - The Source for Java Technology Collaboration
>
> EB> Same comment as for the EL artifact
>
> Import-Package: javax.servlet;version="3.0",javax.servlet.annotation;v
> ersion="3.0",javax.servlet.descriptor;version="3.0",javax.servlet.htt
> p;version="3.0"
>
> EB> Again, I'm wondering why this imports itself.

Again, likely to be not necessary. You may want to read this to decide
for yourself if it makes sense here or not:

     http://felix.apache.org/site/apache-felix-osgi-faq.html

There is a FAQ on whether or not you should import what you export. I
could probably also provide some more information from my book on this
topic if it would help.

-> richard


>
> SECTION: javax.servlet.jsp-api-2.2.1.jar
>
> Export-Package: javax.servlet.jsp.el;uses:="javax.servlet,javax.el,jav
> ax.servlet.jsp,javax.servlet.http";version="2.2.1",javax.servlet.jsp.
> tagext;uses:="javax.servlet.jsp";version="2.2.1",javax.servlet.jsp;us
> es:="javax.servlet,javax.el,javax.servlet.jsp.el,javax.servlet.jsp.ta
> gext,javax.servlet.http";version="2.2.1"
> Tool: Bnd-0.0.255
> Import-Package: javax.el,javax.servlet,javax.servlet.http,javax.servle
> t.jsp;version="2.2.1",javax.servlet.jsp.el;version="2.2.1",javax.serv
> let.jsp.tagext;version="2.2.1"
>
> EB> Same comment as for the EL artifact
>
> Bundle-License: https://glassfish.dev.java.net/nonav/public/CDDL+GPL.h
> tml
> Bundle-Description: Java.net - The Source for Java Technology Collabor
> ation
>
> EB> Same comment as for the EL artifact
>
> Bundle-DocURL: http://glassfish.org
>
> EB> Same comment as for the EL artifact
>