Author: rmannibucau Date: Sun Sep 22 08:21:56 2013 New Revision: 1525331 URL: http://svn.apache.org/r1525331 Log: TOMEE-1041 adding Mvn.Builder to create archives
Modified: tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/Mvn.java tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/PreloadableTestWar.java tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/PreloadableWar.java Modified: tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/Mvn.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/Mvn.java?rev=1525331&r1=1525330&r2=1525331&view=diff ============================================================================== --- tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/Mvn.java (original) +++ tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/Mvn.java Sun Sep 22 08:21:56 2013 @@ -38,88 +38,148 @@ import java.util.HashMap; import java.util.Map; public final class Mvn { - /** - * Client war. - * - * @return create a war with src/main/resources, src/main/webapp and all compile and runtime dependencies - */ - public static Archive<?> war() { - return war("test.war", null); - } + public static class Builder { + private File basedir = null; + private File resources = null; + private File webapp = null; + private File classes = null; + private String basePackage = null; + private String name = "test.war"; + private Map<File, String> additionalResources = new HashMap<File, String>(); + private ScopeType[] scopes = { ScopeType.COMPILE, ScopeType.RUNTIME }; - /** - * Server war without tests clases. - * - * @return create a war with src/main/resources, src/main/webapp and all compile, runtime and test dependencies - */ - public static Archive<?> testWar() { - return war("test.war", null, ScopeType.COMPILE, ScopeType.RUNTIME, ScopeType.TEST); - } + public Builder scopes(final ScopeType... scopes) { + this.scopes = scopes; + return this; + } - public static Archive<?> war(final String name, final String basePackage, final ScopeType... scopes) { - final File basedir = basedir(); + public Builder basedir(final File path) { + this.basedir = path; + return this; + } - final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, name); + public Builder resources(final File path) { + this.resources = path; + return this; + } - if (basePackage == null) { - final File classes = new File(basedir, "target/classes/"); - add(webArchive, classes, "/WEB-INF/classes/"); - } else { - webArchive.addPackages(true, basePackage); + public Builder webapp(final File path) { + this.webapp = path; + return this; } - final File webapp = new File(basedir, "src/main/webapp"); - add(webArchive, webapp, "/"); - if (basePackage != null) { - final File resources = new File(basedir, "src/main/resources"); - add(webArchive, resources, "/WEB-INF/classes/"); + public Builder classes(final File path) { + this.classes = path; + return this; } - final ScopeType[] types; - if (scopes == null || scopes.length == 0) { - types = new ScopeType[]{ ScopeType.COMPILE, ScopeType.RUNTIME }; - } else { - types = scopes; + public Builder applicationPackage(final String base) { + this.basePackage = base; + return this; } - try { - final File[] deps = Maven.resolver().offline().loadPomFromFile(new File(basedir, "pom.xml")) - .importDependencies(types).resolve().withTransitivity().asFile(); - if (deps.length > 0) { - webArchive.addAsLibraries(deps); - } - } catch (final Exception e) { - // no-op + + public Builder name(final String name) { + this.name = name; + return this; } - return webArchive; - } + public Builder additionalResource(final File folder, final String root) { + additionalResources.put(folder, root); + return this; + } + + public Archive<?> build() { + initDefaults(); + + final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, name); + + if (basePackage != null) { + webArchive.addPackages(true, basePackage); + } + add(webArchive, classes, "/WEB-INF/classes/") + .add(webArchive, resources, "/WEB-INF/classes/") + .add(webArchive, webapp, "/"); + for (final Map.Entry<File, String> additionalResource : additionalResources.entrySet()) { + add(webArchive, additionalResource.getKey(), additionalResource.getValue()); + } + + try { + final File[] deps = Maven.resolver().offline().loadPomFromFile(new File(basedir, "pom.xml")) + .importDependencies(scopes).resolve().withTransitivity().asFile(); + if (deps.length > 0) { + webArchive.addAsLibraries(deps); + } + } catch (final Exception e) { + // no-op: no deps + } - private static void add(final WebArchive webArchive, final File classes, final String root) { - if (!classes.exists()) { - return; + return webArchive; } - final KnownResourcesFilter filter = new KnownResourcesFilter(classes, root); - filter.update( - webArchive.merge( - ShrinkWrap.create(GenericArchive.class).as(ExplodedImporter.class) - .importDirectory(classes).as(GenericArchive.class), root, filter)); - } + private File basedir() { + if (basedir != null) { + return basedir; + } - private static File basedir() { - { - final File file = new File("pom.xml"); - if (file.exists()) { - return new File("."); + { + final File file = new File("pom.xml"); + if (file.exists()) { + return new File("."); + } + } + { + final File file = new File("../pom.xml"); + if (file.exists()) { + return new File(".."); + } } + throw new IllegalStateException("basedir not found"); } - { - final File file = new File("../pom.xml"); - if (file.exists()) { - return new File(".."); + + private void initDefaults() { + final File basedir = basedir(); + if (classes == null && basePackage == null) { + classes = new File(basedir, "target/classes"); + } + if (resources == null && basePackage != null) { + resources = new File(basedir, "src/main/resources"); + } + if (webapp == null) { + webapp = new File(basedir, "src/main/webapp"); } } - throw new IllegalStateException("basedir not found"); + + private Builder add(final WebArchive webArchive, final File dir, final String root) { + if (dir == null || !dir.exists()) { + return this; + } + + final KnownResourcesFilter filter = new KnownResourcesFilter(dir, root); + filter.update( + webArchive.merge( + ShrinkWrap.create(GenericArchive.class).as(ExplodedImporter.class) + .importDirectory(dir).as(GenericArchive.class), root, filter)); + + return this; + } + } + + /** + * Client war. + * + * @return create a war with src/main/resources, src/main/webapp and all compile and runtime dependencies + */ + public static Archive<?> war() { + return new Builder().build(); + } + + /** + * Server war without tests clases. + * + * @return create a war with src/main/resources, src/main/webapp and all compile, runtime and test dependencies + */ + public static Archive<?> testWar() { + return new Builder().scopes(ScopeType.COMPILE, ScopeType.RUNTIME, ScopeType.TEST).build(); } private Mvn() { Modified: tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/PreloadableTestWar.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/PreloadableTestWar.java?rev=1525331&r1=1525330&r2=1525331&view=diff ============================================================================== --- tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/PreloadableTestWar.java (original) +++ tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/PreloadableTestWar.java Sun Sep 22 08:21:56 2013 @@ -37,7 +37,7 @@ public class PreloadableTestWar { es.shutdown(); } - public Archive<?> war() { + public static Archive<?> war() { try { return war.get(); } catch (final Exception e) { Modified: tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/PreloadableWar.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/PreloadableWar.java?rev=1525331&r1=1525330&r2=1525331&view=diff ============================================================================== --- tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/PreloadableWar.java (original) +++ tomee/tomee/trunk/arquillian/ziplock/src/main/java/org/apache/ziplock/maven/PreloadableWar.java Sun Sep 22 08:21:56 2013 @@ -37,7 +37,7 @@ public class PreloadableWar { es.shutdown(); } - public Archive<?> war() { + public static Archive<?> war() { try { return war.get(); } catch (final Exception e) {