You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by de...@apache.org on 2011/12/09 11:42:22 UTC
svn commit: r1212327 - in /maven/plugins/trunk/maven-ear-plugin/src/site:
apt/examples/excluding-files-from-ear.apt.vm apt/index.apt site.xml
Author: dennisl
Date: Fri Dec 9 10:42:21 2011
New Revision: 1212327
URL: http://svn.apache.org/viewvc?rev=1212327&view=rev
Log:
[MEAR-87] Allow exclusion of artifacts when building the ear file
o Add documentation for this new feature.
Added:
maven/plugins/trunk/maven-ear-plugin/src/site/apt/examples/excluding-files-from-ear.apt.vm
- copied, changed from r1211459, maven/plugins/trunk/maven-war-plugin/src/site/apt/examples/including-excluding-files-from-war.apt.vm
Modified:
maven/plugins/trunk/maven-ear-plugin/src/site/apt/index.apt
maven/plugins/trunk/maven-ear-plugin/src/site/site.xml
Copied: maven/plugins/trunk/maven-ear-plugin/src/site/apt/examples/excluding-files-from-ear.apt.vm (from r1211459, maven/plugins/trunk/maven-war-plugin/src/site/apt/examples/including-excluding-files-from-war.apt.vm)
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ear-plugin/src/site/apt/examples/excluding-files-from-ear.apt.vm?p2=maven/plugins/trunk/maven-ear-plugin/src/site/apt/examples/excluding-files-from-ear.apt.vm&p1=maven/plugins/trunk/maven-war-plugin/src/site/apt/examples/including-excluding-files-from-war.apt.vm&r1=1211459&r2=1212327&rev=1212327&view=diff
==============================================================================
--- maven/plugins/trunk/maven-war-plugin/src/site/apt/examples/including-excluding-files-from-war.apt.vm (original)
+++ maven/plugins/trunk/maven-ear-plugin/src/site/apt/examples/excluding-files-from-ear.apt.vm Fri Dec 9 10:42:21 2011
@@ -1,9 +1,9 @@
------
- Including and Excluding Files From the WAR
+ Excluding Files From the EAR
------
Dennis Lundberg
------
- 2011-11-21
+ 2011-12-09
------
~~ Licensed to the Apache Software Foundation (ASF) under one
@@ -26,16 +26,70 @@
~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html
-Including and Excluding Files From the WAR
+Excluding Files From the EAR
- It is possible to include or exclude certain files from the WAR file, by using
- the <<<\<packagingIncludes\>>>> and <<<\<packagingExcludes\>>>> configuration
+ It is possible to exclude certain files from the EAR, by using the
+ <<<\<packagingIncludes\>>>> and <<<\<packagingExcludes\>>>> configuration
parameters. They each take a comma-separated list of Ant file set patterns.
You can use wildcards such as <<<**>>> to indicate multiple directories and
<<<*>>> to indicate an optional part of a file or directory name.
-
- Here is an example where we exclude all JAR files from <<<WEB-INF/lib>>>:
+
+
+* Shared libraries
+
+ One use case for this is if you want to use shared libraries in your
+ application server. This involves configuring a location in your application
+ server that contains some libraries that you want to share between several
+ EARs. This is a bit like {{{./skinny-wars.html}skinny WARs}}, but taken to the
+ next level. With skinny WARs you share libraries (JARs) between web
+ applications within an enterprise application. Shared libraries as described
+ here shares libraries (JARs) between enterprise applications.
+
+ As an example, let's say that we want to exclude all non-in-house artifacts
+ from the generated EARs, so that the EAR files we distribute only contains our
+ own artifacts. The other dependencies we want to put in a shared library on
+ our application server. They only serve to bloat our EAR files, especially
+ if we're building or deploying several EARs, each with all of those
+ dependencies in them.
+
+ Our company in this example, the Acme Corporation, have wisely set a naming
+ convention for all their in-house artifacts. The artifactId is always prefixed
+ with "acme-". If they do not use a shared library, the directory layout for
+ their applications might look like this:
+
++-----------------+
+ acme-ear-1
+ |-- acme-ejb-1.jar
+ |-- acme-library-1.jar
+ |-- acme-library-2.jar
+ |-- acme-war-1.war
+ |-- acme-war-2.war
+ |-- external-library-1.jar
+ |-- external-library-2.jar
+ `-- external-library-3.jar
+
+ acme-ear-2
+ |-- acme-ejb-1.war
+ |-- acme-library-1.jar
+ |-- acme-library-2.jar
+ |-- acme-war-3.war
+ |-- acme-war-4.war
+ |-- external-library-2.jar
+ |-- external-library-3.jar
+ `-- external-library-4.jar
++-----------------+
+
+
+** Configuring the EARs
+
+ In order for us to avoid having duplicate copies of the external libraries we
+ need to do two things. First we make sure that our EARs only contain our own
+ artifacts. We do this with the <<<\<packagingIncludes\>>>> parameter, which
+ tells the EAR Plugin what files to include in the EAR. Everything else will be
+ excluded. This configuration should be used in all of Acme's EAR projects, so
+ it would be better to move this configuration to a parent that is shared
+ by all of Acme's EAR projects.
+-----------------+
<project>
@@ -43,10 +97,10 @@ Including and Excluding Files From the W
<build>
<plugins>
<plugin>
- <artifactId>maven-war-plugin</artifactId>
+ <artifactId>maven-ear-plugin</artifactId>
<version>${project.version}</version>
<configuration>
- <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
+ <packagingIncludes>META-INF/**,**/acme-*.jar,**/acme-*.war</packagingIncludes>
</configuration>
</plugin>
</plugins>
@@ -55,32 +109,47 @@ Including and Excluding Files From the W
</project>
+-----------------+
- Sometimes even such wildcards are not enough. In these cases you can use
- regular expressions with the <<<%regex[]>>> syntax. Here is a real life use
- case in which this is used. In this example we want to exclude any
- commons-logging and log4j JARs, but we do not want to exclude the
- log4j-over-slf4j JAR. So we want to exclude <<<log4j-\<version\>.jar>>> but
- keep the <<<log4j-over-slf4j-\<version\>.jar>>>.
+
+** Creating the shared library EAR
+
+ Next we create a shared library EAR that contains all the dependencies that we
+ want to share between the EARs. In this example we are packaging our shared
+ library as an EAR. What type of packaging you can use differ between various
+ application servers.
+
+ <<Note:>> The <<<\<version\>>>> elements of the dependencies have been omitted
+ here for brevity.
+-----------------+
<project>
...
+ <artifactId>external-shared-libraries</artifactId>
+ <packaging>ear</packaging>
+ ...
+ <dependencies>
+ <dependency>
+ <groupId>com.external.supplier</groupId>
+ <artifactId>external-library-1.jar</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.external.supplier</groupId>
+ <artifactId>external-library-2.jar</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.external.supplier</groupId>
+ <artifactId>external-library-3.jar</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.external.supplier</groupId>
+ <artifactId>external-library-4.jar</artifactId>
+ </dependency>
+ </dependencies>
+ ...
<build>
<plugins>
<plugin>
- <artifactId>maven-war-plugin</artifactId>
+ <artifactId>maven-ear-plugin</artifactId>
<version>${project.version}</version>
- <configuration>
- <!--
- Exclude JCL and LOG4J since all logging should go through SLF4J.
- Note that we're excluding log4j-<version>.jar but keeping
- log4j-over-slf4j-<version>.jar
- -->
- <packagingExcludes>
- WEB-INF/lib/commons-logging-*.jar,
- %regex[WEB-INF/lib/log4j-(?!over-slf4j).*.jar]
- </packagingExcludes>
- </configuration>
</plugin>
</plugins>
</build>
@@ -88,7 +157,33 @@ Including and Excluding Files From the W
</project>
+-----------------+
- If you have more real life examples of using regular expressions, we'd like to
- know about them. Please file an issue in
- {{{../issue-tracking.html}our issue tracker}} with your configuration, so we
- can expand this page.
+** The results
+
+ With all the Maven configuration done, the resulting directory layout would
+ look like this:
+
++-----------------+
+ external-shared-libraries
+ |-- external-library-1.jar
+ |-- external-library-2.jar
+ |-- external-library-3.jar
+ `-- external-library-4.jar
+
+ acme-ear-1
+ |-- acme-ejb-1.jar
+ |-- acme-library-1.jar
+ |-- acme-library-2.jar
+ |-- acme-war-1.war
+ `-- acme-war-2.war
+
+ acme-ear-2
+ |-- acme-ejb-1.war
+ |-- acme-library-1.jar
+ |-- acme-library-2.jar
+ |-- acme-war-3.war
+ `-- acme-war-4.war
++-----------------+
+
+ <<Note:>> You would also need to configure your application server to use
+ <<<external-shared-libraries>>> as a shared library. How you do that is
+ however out of scope for this example.
Modified: maven/plugins/trunk/maven-ear-plugin/src/site/apt/index.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ear-plugin/src/site/apt/index.apt?rev=1212327&r1=1212326&r2=1212327&view=diff
==============================================================================
--- maven/plugins/trunk/maven-ear-plugin/src/site/apt/index.apt (original)
+++ maven/plugins/trunk/maven-ear-plugin/src/site/apt/index.apt Fri Dec 9 10:42:21 2011
@@ -114,6 +114,8 @@ Maven EAR Plugin
* {{{./examples/excluding-a-module.html}Excluding A Module}}
+ * {{{./examples/excluding-files-from-ear.html}Excluding Files From the EAR}}
+
* {{{./examples/unpacking-a-module.html}Unpacking A Module}}
* {{{./examples/including-a-third-party-library-in-application-xml.html}
Modified: maven/plugins/trunk/maven-ear-plugin/src/site/site.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ear-plugin/src/site/site.xml?rev=1212327&r1=1212326&r2=1212327&view=diff
==============================================================================
--- maven/plugins/trunk/maven-ear-plugin/src/site/site.xml (original)
+++ maven/plugins/trunk/maven-ear-plugin/src/site/site.xml Fri Dec 9 10:42:21 2011
@@ -42,6 +42,7 @@ under the License.
<item name="Customizing A Module Location" href="examples/customizing-module-location.html"/>
<item name="Customizing A Module URI" href="examples/customizing-module-uri.html"/>
<item name="Excluding A Module" href="examples/excluding-a-module.html"/>
+ <item name="Excluding Files From the EAR" href="examples/excluding-files-from-ear.html"/>
<item name="Unpacking A Module" href="examples/unpacking-a-module.html"/>
<item name="Including A Third Party Library In application.xml" href="examples/including-a-third-party-library-in-application-xml.html"/>
<item name="Specifying Security Roles For The Generated application.xml" href="examples/specifying-security-roles-for-the-generated-application-xml.html"/>