You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kh...@apache.org on 2014/12/12 21:18:48 UTC

svn commit: r1645058 - in /maven/plugins/trunk/maven-ear-plugin/src: it/skinny-wars-javaee5/ it/skinny-wars-javaee5/ear-module/ it/skinny-wars-javaee5/war-module/ it/skinny-wars-javaee5/war-module/src/ it/skinny-wars-javaee5/war-module/src/main/ it/ski...

Author: khmarbaise
Date: Fri Dec 12 20:18:48 2014
New Revision: 1645058

URL: http://svn.apache.org/r1645058
Log:
[MEAR-182] Skinny WAR's - Skip Class-Path Modification in Manifest
 Applied patch of Mario Däpp with slight enhancement by using the
 option skipClassPathModification which is defined to true
 by default to keep backward compatibility.

Added:
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/ear-module/
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/ear-module/pom.xml
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/pom.xml
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/verify.bsh
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/pom.xml
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/src/
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/src/main/
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/src/main/webapp/
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/src/main/webapp/WEB-INF/
    maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/src/main/webapp/WEB-INF/web.xml
Modified:
    maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/EarMojo.java

Added: maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/ear-module/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/ear-module/pom.xml?rev=1645058&view=auto
==============================================================================
--- maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/ear-module/pom.xml (added)
+++ maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/ear-module/pom.xml Fri Dec 12 20:18:48 2014
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.ear.skinnywars</groupId>
+  <artifactId>ear-module</artifactId>
+  <version>1.0</version>
+  <packaging>ear</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.5</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.its.ear.skinnywars</groupId>
+      <artifactId>war-module</artifactId>
+      <version>1.0</version>
+      <type>war</type>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-ear-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <version>5</version>
+          <defaultLibBundleDir>lib</defaultLibBundleDir>
+          <skinnyWars>true</skinnyWars>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Added: maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/pom.xml?rev=1645058&view=auto
==============================================================================
--- maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/pom.xml (added)
+++ maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/pom.xml Fri Dec 12 20:18:48 2014
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.ear.skinnywars</groupId>
+  <artifactId>pom</artifactId>
+  <version>1.0</version>
+  <packaging>pom</packaging>
+
+  <description>Test Skinny WAR generation</description>
+
+  <modules>
+      <module>ear-module</module>
+      <module>war-module</module>
+  </modules>
+</project>

Added: maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/verify.bsh
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/verify.bsh?rev=1645058&view=auto
==============================================================================
--- maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/verify.bsh (added)
+++ maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/verify.bsh Fri Dec 12 20:18:48 2014
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+import java.io.*;
+import java.util.*;
+import java.util.jar.*;
+import java.util.regex.*;
+
+File jarFile = new File( basedir, "ear-module/target/ear-module-1.0/war-module-1.0.war" );
+System.out.println( "Checking for existence of " + jarFile );
+if ( !jarFile.isFile() )
+{
+    throw new IllegalStateException( "Missing file: " + jarFile );
+}
+
+JarFile jar = new JarFile( jarFile );
+
+String[] includedEntries = {
+    "WEB-INF/web.xml",
+    "META-INF/MANIFEST.MF"
+};
+for ( String included : includedEntries )
+{
+    System.out.println( "Checking for included archive entry " + included );
+    if ( jar.getEntry( included ) == null )
+    {
+        throw new IllegalStateException( "Missing archive entry: " + included );
+    }
+}
+
+Manifest manifest = jar.getManifest();
+String manifestClassPath = manifest.getMainAttributes().getValue("Class-Path");
+if ( manifestClassPath != null && manifestClassPath.equals("lib/commons-lang-2.5.jar") )
+{
+    throw new IllegalStateException( "Superfluous entry in war MANIFEST.MF: commons-lang-2.5.jar");
+}
+
+String[] excludedEntries = {
+    "WEB-INF/lib/commons-lang-2.5.jar"
+};
+for ( String excluded : excludedEntries )
+{
+    System.out.println( "Checking for excluded artifact " + excluded );
+    if ( jar.getEntry( excluded ) != null )
+    {
+        throw new IllegalStateException( "Archive entry should be excluded: " + excluded );
+    }
+}
+
+jar.close();
+
+
+File jarFile = new File( basedir, "war-module/target/war-module-1.0.war" );
+System.out.println( "Checking for existence of " + jarFile );
+if ( !jarFile.isFile() )
+{
+    throw new IllegalStateException( "Missing file: " + jarFile );
+}
+
+JarFile jar = new JarFile( jarFile );
+
+String[] includedEntries = {
+    "WEB-INF/web.xml",
+    "META-INF/MANIFEST.MF",
+    "WEB-INF/lib/commons-lang-2.5.jar"
+};
+for ( String included : includedEntries )
+{
+    System.out.println( "Checking for included archive entry " + included );
+    if ( jar.getEntry( included ) == null )
+    {
+        throw new IllegalStateException( "Missing archive entry: " + included );
+    }
+}
+
+jar.close();
+
+return true;

Added: maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/pom.xml?rev=1645058&view=auto
==============================================================================
--- maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/pom.xml (added)
+++ maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/pom.xml Fri Dec 12 20:18:48 2014
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.ear.skinnywars</groupId>
+  <artifactId>war-module</artifactId>
+  <version>1.0</version>
+  <packaging>war</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.5</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <version>2.5</version>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Added: maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/src/main/webapp/WEB-INF/web.xml?rev=1645058&view=auto
==============================================================================
--- maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/src/main/webapp/WEB-INF/web.xml (added)
+++ maven/plugins/trunk/maven-ear-plugin/src/it/skinny-wars-javaee5/war-module/src/main/webapp/WEB-INF/web.xml Fri Dec 12 20:18:48 2014
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+
+<web-app >
+</web-app>

Modified: maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/EarMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/EarMojo.java?rev=1645058&r1=1645057&r2=1645058&view=diff
==============================================================================
--- maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/EarMojo.java (original)
+++ maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/EarMojo.java Fri Dec 12 20:18:48 2014
@@ -134,6 +134,18 @@ public class EarMojo
     protected String escapeString;
 
     /**
+     * In case of using the {@link #skinnyWars} and {@link #defaultLibBundleDir} usually the
+     * classpath will be modified.
+     * By using this option you can change this and keep the classpath untouched.
+     * This option has been introduced to keep the backward compatibility with earlier versions
+     * of the plugin.
+     * 
+     * @since 2.10
+     */
+    @Parameter( defaultValue = "true" )
+    private boolean skipClassPathModification;
+
+    /**
      * The location of the manifest file to be used within the EAR file. If no value if specified, the default location
      * in the workDirectory is taken. If the file does not exist, a manifest will be generated automatically.
      */
@@ -374,7 +386,7 @@ public class EarMojo
 
                     if ( skinnyWars && module.changeManifestClasspath() )
                     {
-                        changeManifestClasspath( module, destinationFile );
+                        changeManifestClasspath( module, destinationFile, javaEEVersion );
                     }
                 }
                 else
@@ -386,7 +398,7 @@ public class EarMojo
 
                         if ( skinnyWars && module.changeManifestClasspath() )
                         {
-                            changeManifestClasspath( module, destinationFile );
+                            changeManifestClasspath( module, destinationFile, javaEEVersion );
                         }
                     }
                     else
@@ -702,7 +714,7 @@ public class EarMojo
         return filterWrappers;
     }
 
-    private void changeManifestClasspath( EarModule module, File original )
+    private void changeManifestClasspath( EarModule module, File original, JavaEEVersion javaEEVersion )
         throws MojoFailureException
     {
         try
@@ -792,7 +804,17 @@ public class EarMojo
                     }
                     else
                     {
-                        classPathElements.add( jm.getUri() );
+                        if ( skipClassPathModification )
+                        {
+                            classPathElements.add( jm.getUri() );
+                        }
+                        else
+                        {
+                            if ( javaEEVersion.lt( JavaEEVersion.FIVE ) || defaultLibBundleDir == null )
+                            {
+                                classPathElements.add( jm.getUri() );
+                            }
+                        }
                     }
                 }
             }