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>