Author: ltheussl
Date: Fri Apr  7 22:49:07 2006
New Revision: 392483

URL: http://svn.apache.org/viewcvs?rev=392483&view=rev
Log:
PR: MPJAR-36, MPJAR-39, MPJAR-49
Submitted by: Michael Gaffney
Jar plugin generates incorrect manifest file.

Added:
    maven/maven-1/plugins/trunk/jar/xdocs/manifest.xml   (with props)
Modified:
    maven/maven-1/plugins/trunk/jar/plugin.jelly
    maven/maven-1/plugins/trunk/jar/project.xml
    maven/maven-1/plugins/trunk/jar/xdocs/changes.xml
    maven/maven-1/plugins/trunk/jar/xdocs/navigation.xml

Modified: maven/maven-1/plugins/trunk/jar/plugin.jelly
URL: 
http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/jar/plugin.jelly?rev=392483&r1=392482&r2=392483&view=diff
==============================================================================
--- maven/maven-1/plugins/trunk/jar/plugin.jelly (original)
+++ maven/maven-1/plugins/trunk/jar/plugin.jelly Fri Apr  7 22:49:07 2006
@@ -83,9 +83,11 @@
       </ant:metainf>
       <ant:manifest>
         <ant:attribute name="Built-By" value="${user.name}"/>
-        <ant:attribute name="Created-By" value="Apache Maven"/>
-        <ant:attribute name="Package" value="${pom.package}"/>
-        <ant:attribute name="Build-Jdk" value="${java.version}"/>
+
+        <j:set var="mavenVersion" value="${maven.application.version}"/>
+        <j:if test="${mavenVersion != null}">
+          <ant:attribute name="Maven-Version" value="${mavenVersion}"/>
+        </j:if>
 
         <j:set var="jarClasspath" value="${maven.jar.manifest.classpath.add}"/>
         <j:if test="${jarClasspath}">
@@ -94,20 +96,11 @@
                     <j:set var="maven.jar.classpath" 
value="${maven.jar.classpath} ${dep.artifact}" /> 
                 </j:if>
             </j:forEach>
-            <j:if test="${maven.jar.classpath.length() != 0}">
+            <j:if test="${!empty(maven.jar.classpath)}">
                 <ant:attribute name="Class-Path" 
value="${maven.jar.classpath}"/>
             </j:if>
         </j:if>
-        <!-- added supplementary entries -->
-        <ant:attribute name="Extension-Name" value="${pom.artifactId}"/>
-        <ant:attribute name="Specification-Title" 
value="${specificationTitle}" />
-        <ant:attribute name="Specification-Vendor" 
value="${pom.organization.name}"/>
-        <!--
-        <ant:attribute name="Specification-Version" 
value="${pom.currentVersion}"/>
-        -->
-        <ant:attribute name="Implementation-Title" value="${pom.package}"/>
-        <ant:attribute name="Implementation-Vendor" 
value="${pom.organization.name}"/>
-        <ant:attribute name="Implementation-Version" 
value="${pom.currentVersion}"/>
+
         <j:set var="mainclass" value="${maven.jar.mainclass}" />
         <j:if test="${!empty(mainclass)}">
             <ant:attribute name="Main-Class" value="${mainclass}"/>
@@ -146,14 +139,48 @@
           </j:forEach>        
         </j:if>
 
-        <j:if 
test="${context.getVariable('maven.jar.manifest.attributes.list') != null}">
+        <!-- Remove SNAPSHOT -->
+        <j:choose>
+          <j:when test="${pom.currentVersion.endsWith('-SNAPSHOT')}">
+            <j:invokeStatic className="org.apache.commons.lang.StringUtils" 
method="substringBeforeLast" var="pomCurrentVersion">
+                <j:arg value="${pom.currentVersion}" type="java.lang.String"/>
+                <j:arg value="-SNAPSHOT" type="java.lang.String"/>
+            </j:invokeStatic>
+          </j:when>
+          <j:otherwise>
+            <j:set var="pomCurrentVersion" value="${pom.currentVersion}"/>
+          </j:otherwise>
+        </j:choose>
+
+        <util:tokenize var="versionItems" delim="." 
trim="true">${pomCurrentVersion}</util:tokenize>
+        <j:if test="${size(versionItems) > 0}">
+          <j:set var="specificationVersion" value="${versionItems[0]}" />
+        </j:if>
+        <j:if test="${size(versionItems) > 1}">
+          <j:set var="specificationVersion" 
value="${specificationVersion}.${versionItems[1]}" />
+        </j:if>
+        <j:if test="${size(versionItems) > 2}">
+          <j:set var="specificationVersion" 
value="${specificationVersion}.${versionItems[2]}" />
+        </j:if>
+
+        <util:replace var="packagePath" oldChar="." newChar="/" 
value="${pom.package}"/>
+        <ant:section name="${packagePath}">
+          <ant:attribute name="Extension-name" value="${pom.package}"/>
+          <ant:attribute name="Specification-Title" 
value="${specificationTitle}"/>
+          <ant:attribute name="Specification-Vendor" 
value="${pom.organization.name}"/>
+          <ant:attribute name="Specification-Version" 
value="${specificationVersion}"/>
+          <ant:attribute name="Implementation-Title" value="${pom.package}"/>
+          <ant:attribute name="Implementation-Vendor" 
value="${pom.organization.name}"/>
+          <ant:attribute name="Implementation-Version" 
value="${pom.currentVersion}"/>
+          <j:if 
test="${context.getVariable('maven.jar.manifest.attributes.list') != null}">
             <util:tokenize var="attributeList" delim="," 
trim="true">${maven.jar.manifest.attributes.list}</util:tokenize>
             <j:forEach var="attribute" items="${attributeList}">
-                <j:set var="name" 
value="maven.jar.manifest.attribute.${attribute}"/>
-                <j:set var="value" value="${context.findVariable(name)}"/>
-                <ant:attribute name="${attribute}" value="${value}"/>
+              <j:set var="name" 
value="maven.jar.manifest.attribute.${attribute}"/>
+              <j:set var="value" value="${context.findVariable(name)}"/>
+              <ant:attribute name="${attribute}" value="${value}"/>
             </j:forEach>
-        </j:if>
+          </j:if>
+        </ant:section>
 
         <j:if test="${context.getVariable('maven.jar.manifest.groups.list') != 
null}">
             <util:tokenize var="groupList" delim="," 
trim="true">${maven.jar.manifest.groups.list}</util:tokenize>

Modified: maven/maven-1/plugins/trunk/jar/project.xml
URL: 
http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/jar/project.xml?rev=392483&r1=392482&r2=392483&view=diff
==============================================================================
--- maven/maven-1/plugins/trunk/jar/project.xml (original)
+++ maven/maven-1/plugins/trunk/jar/project.xml Fri Apr  7 22:49:07 2006
@@ -60,6 +60,15 @@
       <version>1.0</version>
     </dependency>
     <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.0</version>
+      <url>http://jakarta.apache.org/commons/lang/</url>
+      <properties>
+        <comment>This library is already loaded by maven's core. Be careful to 
use the same version number as in the core.</comment>
+      </properties>
+    </dependency>
+    <dependency>
       <groupId>velocity</groupId>
       <artifactId>velocity</artifactId>
       <version>1.4</version>

Modified: maven/maven-1/plugins/trunk/jar/xdocs/changes.xml
URL: 
http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/jar/xdocs/changes.xml?rev=392483&r1=392482&r2=392483&view=diff
==============================================================================
--- maven/maven-1/plugins/trunk/jar/xdocs/changes.xml (original)
+++ maven/maven-1/plugins/trunk/jar/xdocs/changes.xml Fri Apr  7 22:49:07 2006
@@ -25,6 +25,13 @@
   </properties>
   <body>
     <release version="1.8-SNAPSHOT" date="In SVN">
+      <action dev="ltheussl" type="add" issue="MPJAR-39">Support 
specificationVersion in manifest.</action>
+      <action dev="ltheussl" type="fix">
+        <description>Jar plugin generates incorrect manifest 
file.</description>
+        <fixes issue="MPJAR-36"/>
+        <fixes issue="MPJAR-49"/>
+        <dueto name="Michael Gaffney"/>
+      </action>
       <action dev="aheritier" type="fix">java:compile and java:jar-resources 
should be called before the jar goal to create the good directory structure. It 
was done in test:test before but it's also a prerequisite for jar:jar.</action>
       <action dev="ltheussl" type="update" issue="MPJAR-47">Remove unused 
properties from documentation.</action>
       <action dev="ltheussl" type="update" issue="MPJAR-35" due-to="Dennis 
Lundberg">Document need for jar.manifest.classpath property.</action>

Added: maven/maven-1/plugins/trunk/jar/xdocs/manifest.xml
URL: 
http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/jar/xdocs/manifest.xml?rev=392483&view=auto
==============================================================================
--- maven/maven-1/plugins/trunk/jar/xdocs/manifest.xml (added)
+++ maven/maven-1/plugins/trunk/jar/xdocs/manifest.xml Fri Apr  7 22:49:07 2006
@@ -0,0 +1,145 @@
+<?xml version="1.0"?>
+<!-- 
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<document>
+
+  <properties>
+    <title>The Manifest</title>
+  </properties>
+
+  <body>
+    <section name="The manifest file">
+      <p>
+        Here is a typical manifest file generated by the 
<code>maven-jar-plugin-1.8</code>:
+      </p>
+      <source>Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.6.5
+Created-By: 1.4.2_10-b03 (Sun Microsystems Inc.)
+Built-By: lukas
+Maven-Version: 1.1-beta-3-SNAPSHOT
+
+Name: org/apache/maven
+Extension-name: org.apache.maven
+Specification-Title: Create jar files
+Specification-Vendor: Apache Software Foundation
+Specification-Version: 1.8
+Implementation-Title: org.apache.maven
+Implementation-Vendor: Apache Software Foundation
+Implementation-Version: 1.8-SNAPSHOT</source>
+      <p>
+        Note that the structure was different and probably not compatible in 
older versions
+        of the plugin, see <a 
href="http://jira.codehaus.org/browse/MPJAR-36";>MPJAR-36</a>.
+        
+      </p>
+      <subsection name="Default attributes">
+        <table>
+          <tr><th>Attribute</th><th>Default value</th></tr>
+          <tr>
+            <td><code>Created-By</code></td>
+            <td>The java version used to generate the manifest file</td>
+          </tr>
+          <tr>
+            <td><code>Built-By</code></td>
+            <td>${user.name}</td>
+          </tr>
+          <tr>
+            <td><code>Maven-Version</code></td>
+            <td>${maven.application.version}</td>
+          </tr>
+          <tr>
+            <td><code>Class-Path</code></td>
+            <td>
+              See the <code>maven.jar.manifest.classpath.add</code>
+              <a href="properties.html">property</a>.
+            </td>
+          </tr>
+          <tr>
+            <td><code>Main-Class</code></td>
+            <td>
+              See the <code>maven.jar.mainclass</code>
+              <a href="properties.html">property</a>.
+            </td>
+          </tr>
+          <tr>
+            <td><code>Extension-List</code></td>
+            <td>
+              See the <code>maven.jar.manifest.extensions.add</code>
+              <a href="properties.html">property</a>.
+            </td>
+          </tr>
+          <tr>
+            <td><code>Name</code></td>
+            <td>${pom.package} with "." (dot) replaced by "/" (slash)</td>
+          </tr>
+          <tr>
+            <td><code>Extension-name</code></td>
+            <td>${pom.package}</td>
+          </tr>
+          <tr>
+            <td><code>Specification-Title</code></td>
+            <td>${pom.shortDescription} (trimmed to 46 characters)</td>
+          </tr>
+          <tr>
+            <td><code>Specification-Vendor</code></td>
+            <td>${pom.organization.name}</td>
+          </tr>
+          <tr>
+            <td><code>Specification-Version</code></td>
+            <td>
+              This is constructed from ${pom.currentVersion} in the following 
way:
+              first any occurence of the string "<code>-SNAPSHOT</code>" is 
chopped off,
+              the rest is then tokenized with a delimiter "." (dot), and
+              up to three tokens are kept. <strong>Note</strong> that 
according to
+              <a 
href="http://java.sun.com/j2se/1.4.2/docs/guide/versioning/spec/versioning2.html";>Sun's
 specification</a>
+              this must be a number to compare, so if your 
${pom.currentVersion} contains any
+              non-digit character (apart from "."), the resulting manifest 
will not be valid.
+              You should then override this default (see below).
+            </td>
+          </tr>
+          <tr>
+            <td><code>Implementation-Title</code></td>
+            <td>${pom.package}</td>
+          </tr>
+          <tr>
+            <td><code>Implementation-Vendor</code></td>
+            <td>${pom.organization.name}</td>
+          </tr>
+          <tr>
+            <td><code>Implementation-Version</code></td>
+            <td>${pom.currentVersion}</td>
+          </tr>
+        </table>
+      </subsection>
+      <subsection name="Overriding default values">
+        <p>
+          Any of the above default values can be overridden by specifying
+          a custom manifest file via the <code>maven.jar.manifest</code>
+          <a href="properties.html">property</a>. Note that values in manifest
+          sections (separated from the main section by a blank line) can
+          only be overridden by also specifying the section name.
+          For instance, even if you only want to override the
+          <code>Specification-Version</code> in the example above,
+          you need at least the following in your custom manifest:
+        </p>
+        <source>Name: org/apache/maven
+Specification-Version: 1.8.0</source>
+      </subsection>
+    </section>
+ </body>
+</document>

Propchange: maven/maven-1/plugins/trunk/jar/xdocs/manifest.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/maven-1/plugins/trunk/jar/xdocs/manifest.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/maven-1/plugins/trunk/jar/xdocs/navigation.xml
URL: 
http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/jar/xdocs/navigation.xml?rev=392483&r1=392482&r2=392483&view=diff
==============================================================================
--- maven/maven-1/plugins/trunk/jar/xdocs/navigation.xml (original)
+++ maven/maven-1/plugins/trunk/jar/xdocs/navigation.xml Fri Apr  7 22:49:07 
2006
@@ -32,6 +32,7 @@
     <menu name="Overview">
       <item name="Goals" href="/goals.html"/>
       <item name="Properties" href="/properties.html"/>
+      <item name="Manifest" href="/manifest.html"/>
     </menu>
   </body>
 </project>


Reply via email to