[MEAR-194] Use ear archiver instead of jar archiver (#9)
diff --git a/src/main/java/org/apache/maven/plugins/ear/EarMojo.java b/src/main/java/org/apache/maven/plugins/ear/EarMojo.java
index cd0007e..8489468 100644
--- a/src/main/java/org/apache/maven/plugins/ear/EarMojo.java
+++ b/src/main/java/org/apache/maven/plugins/ear/EarMojo.java
@@ -60,6 +60,7 @@
import org.codehaus.plexus.archiver.Archiver;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.UnArchiver;
+import org.codehaus.plexus.archiver.ear.EarArchiver;
import org.codehaus.plexus.archiver.jar.JarArchiver;
import org.codehaus.plexus.archiver.jar.Manifest;
import org.codehaus.plexus.archiver.jar.Manifest.Attribute;
@@ -211,26 +212,32 @@
private boolean skinnyWars;
/**
- * The Jar archiver to create the output archive.
+ * The Plexus EAR archiver to create the output archive.
+ */
+ @Component( role = Archiver.class, hint = "ear" )
+ private EarArchiver earArchiver;
+
+ /**
+ * The Plexus JAR archiver to create the output archive if not EAR application descriptor is provided (JavaEE 5+).
*/
@Component( role = Archiver.class, hint = "jar" )
private JarArchiver jarArchiver;
/**
- * The Zip archiver for Skinny WAR repackaging.
+ * The Plexus Zip archiver for Skinny WAR repackaging.
*/
@Component( role = Archiver.class, hint = "zip" )
private ZipArchiver zipArchiver;
/**
- * The Zip Un archiver for Skinny WAR repackaging.
+ * The Plexus Zip Un archiver for Skinny WAR repackaging.
*/
@Component( role = UnArchiver.class, hint = "zip" )
private ZipUnArchiver zipUnArchiver;
/**
- * The archive configuration to use. See <a href="http://maven.apache.org/shared/maven-archiver/index.html">Maven
- * Archiver Reference</a>.
+ * The archive configuration to use. See <a href="https://maven.apache.org/shared/maven-archiver/">Maven Archiver
+ * Reference</a>.
*/
@Parameter
private MavenArchiveConfiguration archive = new MavenArchiveConfiguration();
@@ -289,8 +296,22 @@
File earFile = getEarFile( outputDirectory, finalName, classifier );
MavenArchiver archiver = new EarMavenArchiver( getModules() );
- getLog().debug( "Jar archiver implementation [" + jarArchiver.getClass().getName() + "]" );
- archiver.setArchiver( jarArchiver );
+ File ddFile = new File( getWorkDirectory(), APPLICATION_XML_URI );
+
+ JarArchiver theArchiver;
+ if ( ddFile.exists() )
+ {
+ earArchiver.setAppxml( ddFile );
+ theArchiver = earArchiver;
+ }
+ else
+ {
+ // current Plexus EarArchiver does not support application.xml-less JavaEE 5+ case
+ // => fallback to Plexus Jar archiver
+ theArchiver = jarArchiver;
+ }
+ getLog().debug( "Ear archiver implementation [" + theArchiver.getClass().getName() + "]" );
+ archiver.setArchiver( theArchiver );
archiver.setOutputFile( earFile );
archiver.setCreatedBy( "Maven EAR Plugin", "org.apache.maven.plugins", "maven-ear-plugin" );
@@ -370,7 +391,6 @@
}
// Check if deployment descriptor is there
- File ddFile = new File( getWorkDirectory(), APPLICATION_XML_URI );
if ( !ddFile.exists() && ( javaEEVersion.lt( JavaEEVersion.FIVE ) ) )
{
throw new MojoExecutionException( "Deployment descriptor: " + ddFile.getAbsolutePath()