You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/12/30 12:27:18 UTC

tomee git commit: TOMEE-1690 adding js and groovy customizers to tomee maven plugin

Repository: tomee
Updated Branches:
  refs/heads/master 16f874061 -> 697b40673


TOMEE-1690 adding js and groovy customizers to tomee maven plugin


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/697b4067
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/697b4067
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/697b4067

Branch: refs/heads/master
Commit: 697b406736d840eaec7bb303145229863055b5d0
Parents: 16f8740
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Wed Dec 30 12:26:52 2015 +0100
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Wed Dec 30 12:26:52 2015 +0100

----------------------------------------------------------------------
 .../openejb/maven/plugin/AbstractTomEEMojo.java | 75 +++++++++++++++++++-
 .../maven/plugin/test/JsCustomizertest.java     | 56 +++++++++++++++
 2 files changed, 128 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/697b4067/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
----------------------------------------------------------------------
diff --git a/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java b/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
index 62fe7b5..e4cd0ee 100644
--- a/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
+++ b/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
@@ -49,6 +49,10 @@ import org.apache.tomee.util.QuickServerXmlParser;
 import org.codehaus.plexus.configuration.PlexusConfiguration;
 import org.codehaus.plexus.util.FileUtils;
 
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import javax.script.SimpleBindings;
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.Closeable;
@@ -60,6 +64,7 @@ import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.StringReader;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.net.MalformedURLException;
@@ -235,6 +240,12 @@ public abstract class AbstractTomEEMojo extends AbstractAddressMojo {
     @Parameter
     protected List<String> customizers;
 
+    @Parameter
+    protected List<String> jsCustomizers;
+
+    @Parameter
+    protected List<String> groovyCustomizers;
+
     @Parameter(defaultValue = "${project}", readonly = true, required = true)
     protected MavenProject project;
 
@@ -498,6 +509,9 @@ public abstract class AbstractTomEEMojo extends AbstractAddressMojo {
                     thread.setContextClassLoader(currentLoader);
                 }
             }
+
+            scriptCustomization(jsCustomizers, "js");
+            scriptCustomization(groovyCustomizers, "groovy");
         } else {
             alignConfigOnServerXmlCurrentConfig();
         }
@@ -505,6 +519,51 @@ public abstract class AbstractTomEEMojo extends AbstractAddressMojo {
         run();
     }
 
+    private void scriptCustomization(final List<String> customizers, final String ext) throws MojoExecutionException {
+        if (customizers != null) {
+            final ScriptEngine engine = new ScriptEngineManager().getEngineByExtension(ext);
+            if (engine == null) {
+                throw new IllegalStateException("No engine for " + ext + ". Maybe add the JSR223 implementation as plugin dependency.");
+            }
+            for (final String js : customizers) {
+                try {
+                    final SimpleBindings bindings = new SimpleBindings();
+                    bindings.put("catalinaBase", catalinaBase.getAbsolutePath());
+                    bindings.put("resolver", new Resolver() {
+                        @Override
+                        public File resolve(final String group, final String artifact, final String version,
+                                            final String classifier, final String type) {
+                            try {
+                                return AbstractTomEEMojo.this.resolve(group, artifact, version, classifier, type);
+                            } catch (final ArtifactResolutionException | ArtifactNotFoundException e) {
+                                throw new IllegalArgumentException(e);
+                            }
+                        }
+                        @Override
+                        public File resolve(final String group, final String artifact, final String version) {
+                            try {
+                                return AbstractTomEEMojo.this.resolve(group, artifact, version, null, "jar");
+                            } catch (final ArtifactResolutionException | ArtifactNotFoundException e) {
+                                throw new IllegalArgumentException(e);
+                            }
+                        }
+                        @Override
+                        public File resolve(final String group, final String artifact, final String version, final String type) {
+                            try {
+                                return AbstractTomEEMojo.this.resolve(group, artifact, version, null, type);
+                            } catch (final ArtifactResolutionException | ArtifactNotFoundException e) {
+                                throw new IllegalArgumentException(e);
+                            }
+                        }
+                    });
+                    engine.eval(new StringReader(js), bindings);
+                } catch (final ScriptException e) {
+                    throw new MojoExecutionException(e.getMessage(), e);
+                }
+            }
+        }
+    }
+
     private void alignConfigOnServerXmlCurrentConfig() {
         final File sXml = new File(catalinaBase, "conf/server.xml");
         if (sXml.isFile()) {
@@ -776,9 +835,13 @@ public abstract class AbstractTomEEMojo extends AbstractAddressMojo {
             classifier = null;
         }
 
-        final Artifact artifact = factory.createDependencyArtifact(infos[0], infos[1], createFromVersion(infos[2]), type, classifier, SCOPE_COMPILE);
-        resolver.resolve(artifact, remoteRepos, local);
-        return artifact.getFile();
+        return resolve(infos[0], infos[1], infos[2], classifier, type);
+    }
+
+    private File resolve(final String group, final String artifact, final String version, final String classifier, final String type) throws ArtifactResolutionException, ArtifactNotFoundException {
+        final Artifact dependencyArtifact = factory.createDependencyArtifact(group, artifact, createFromVersion(version), type, classifier, SCOPE_COMPILE);
+        resolver.resolve(dependencyArtifact, remoteRepos, local);
+        return dependencyArtifact.getFile();
     }
 
     private void copyWar() {
@@ -1541,4 +1604,10 @@ public abstract class AbstractTomEEMojo extends AbstractAddressMojo {
     }
 
     public abstract String getCmd();
+
+    public interface Resolver {
+        File resolve(String group, String artifact, String version, String classifier, String type);
+        File resolve(String group, String artifact, String version, String type);
+        File resolve(String group, String artifact, String version);
+    }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/697b4067/maven/tomee-maven-plugin/src/test/java/org/apache/openejb/maven/plugin/test/JsCustomizertest.java
----------------------------------------------------------------------
diff --git a/maven/tomee-maven-plugin/src/test/java/org/apache/openejb/maven/plugin/test/JsCustomizertest.java b/maven/tomee-maven-plugin/src/test/java/org/apache/openejb/maven/plugin/test/JsCustomizertest.java
new file mode 100644
index 0000000..b8c340f
--- /dev/null
+++ b/maven/tomee-maven-plugin/src/test/java/org/apache/openejb/maven/plugin/test/JsCustomizertest.java
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+package org.apache.openejb.maven.plugin.test;
+
+import edu.emory.mathcs.backport.java.util.Collections;
+import org.apache.openejb.maven.plugin.Config;
+import org.apache.openejb.maven.plugin.TomEEMavenPluginRule;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.io.File;
+import java.util.List;
+import java.util.zip.ZipFile;
+
+import static java.util.Collections.singletonList;
+import static org.junit.Assert.assertTrue;
+
+public class JsCustomizertest {
+    @Rule
+    public final TomEEMavenPluginRule TMPRule = new TomEEMavenPluginRule().noRun();
+
+    @Config
+    private final List<String> jsCustomizers = singletonList(
+        // copy junit in lib/junit-test.jar
+        "var File = Java.type('java.io.File');" +
+        "var Files = Java.type('java.nio.file.Files');" +
+        "var StandardCopyOption = Java.type('java.nio.file.StandardCopyOption');" +
+        "" +
+        "var junit = resolver.resolve('junit', 'junit', '4.12');" +
+        "Files.copy(junit.toPath(), new File(catalinaBase, 'lib/JsCustomizertest.jar').toPath(), StandardCopyOption.REPLACE_EXISTING);"
+    );
+
+    @Config
+    private final File catalinaBase = new File("target/JsCustomizertest");
+
+    @Test
+    public void run() throws Exception {
+        final File file = new File(catalinaBase, "lib/JsCustomizertest.jar");
+        assertTrue(file.isFile());
+        assertTrue(Collections.list(new ZipFile(file).entries()).size() > 300);
+    }
+}