Author: rfscholte Date: Sun Nov 20 13:08:33 2016 New Revision: 1770555 URL: http://svn.apache.org/viewvc?rev=1770555&view=rev Log: Initial commit maven-scipting-plugin, a jsr223 wrapping maven plugin.
Added: maven/plugins/trunk/maven-scripting-plugin/ (with props) maven/plugins/trunk/maven-scripting-plugin/pom.xml maven/plugins/trunk/maven-scripting-plugin/src/ maven/plugins/trunk/maven-scripting-plugin/src/it/ maven/plugins/trunk/maven-scripting-plugin/src/it/groovy-script/ maven/plugins/trunk/maven-scripting-plugin/src/it/groovy-script/pom.xml maven/plugins/trunk/maven-scripting-plugin/src/it/settings.xml maven/plugins/trunk/maven-scripting-plugin/src/main/ maven/plugins/trunk/maven-scripting-plugin/src/main/java/ maven/plugins/trunk/maven-scripting-plugin/src/main/java/org/ maven/plugins/trunk/maven-scripting-plugin/src/main/java/org/apache/ maven/plugins/trunk/maven-scripting-plugin/src/main/java/org/apache/maven/ maven/plugins/trunk/maven-scripting-plugin/src/main/java/org/apache/maven/plugins/ maven/plugins/trunk/maven-scripting-plugin/src/main/java/org/apache/maven/plugins/scripting/ maven/plugins/trunk/maven-scripting-plugin/src/main/java/org/apache/maven/plugins/scripting/EvalMojo.java Propchange: maven/plugins/trunk/maven-scripting-plugin/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Sun Nov 20 13:08:33 2016 @@ -0,0 +1,4 @@ +.classpath +.project +.settings +target Added: maven/plugins/trunk/maven-scripting-plugin/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-scripting-plugin/pom.xml?rev=1770555&view=auto ============================================================================== --- maven/plugins/trunk/maven-scripting-plugin/pom.xml (added) +++ maven/plugins/trunk/maven-scripting-plugin/pom.xml Sun Nov 20 13:08:33 2016 @@ -0,0 +1,144 @@ +<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-plugins</artifactId> + <version>30</version> + <relativePath>../../pom/maven/maven-plugins/pom.xml</relativePath> + </parent> + + <artifactId>maven-scripting-plugin</artifactId> + <version>3.0.0-SNAPSHOT</version> + <packaging>maven-plugin</packaging> + + <name>Apache Maven Scripting Plugin</name> + <description> + The Maven Scripting Plugin is a plugin that wrapped the Scripting API accoring to JSR223 + </description> + <inceptionYear>2016</inceptionYear> + + <prerequisites> + <maven>${mavenVersion}</maven> + </prerequisites> + + <scm> + <connection>scm:svn:http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-scripting-plugin</connection> + <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-scripting-plugin</developerConnection> + <url>http://svn.apache.org/viewvc/maven/plugins/trunk/maven-scripting-plugin</url> + </scm> + <issueManagement> + <system>JIRA</system> + <url>https://issues.apache.org/jira/browse/MSCRIPTING</url> + </issueManagement> + <distributionManagement> + <site> + <id>apache.website</id> + <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/maven/components/${maven.site.path}</url> + </site> + </distributionManagement> + + <properties> + <mavenVersion>3.0</mavenVersion> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + <version>${mavenVersion}</version> + </dependency> + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-shared-utils</artifactId> + <version>3.1.0</version> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-core</artifactId> + <version>${mavenVersion}</version> + </dependency> + + <!-- dependencies to annotations --> + <dependency> + <groupId>org.apache.maven.plugin-tools</groupId> + <artifactId>maven-plugin-annotations</artifactId> + <scope>provided</scope> + </dependency> + + <!-- ScriptEngines --> + <dependency> + <groupId>org.codehaus.groovy</groupId> + <artifactId>groovy-jsr223</artifactId> + <version>2.4.7</version> + </dependency> + + <!-- Test --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.12</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.maven.plugin-testing</groupId> + <artifactId>maven-plugin-testing-harness</artifactId> + <version>2.1</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-compat</artifactId> + <version>${mavenVersion}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <profiles> + <profile> + <id>run-its</id> + <build> + <pluginManagement> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-invoker-plugin</artifactId> + <configuration> + <projectsDirectory>src/it</projectsDirectory> + <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo> + <preBuildHookScript>setup</preBuildHookScript> + <postBuildHookScript>verify</postBuildHookScript> + <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath> + <settingsFile>src/it/settings.xml</settingsFile> + <goals> + <goal>scripting:eval</goal> + </goals> + </configuration> + </plugin> + </plugins> + </pluginManagement> + </build> + </profile> + </profiles> +</project> Added: maven/plugins/trunk/maven-scripting-plugin/src/it/groovy-script/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-scripting-plugin/src/it/groovy-script/pom.xml?rev=1770555&view=auto ============================================================================== --- maven/plugins/trunk/maven-scripting-plugin/src/it/groovy-script/pom.xml (added) +++ maven/plugins/trunk/maven-scripting-plugin/src/it/groovy-script/pom.xml Sun Nov 20 13:08:33 2016 @@ -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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.apache.maven.plugins.scripting.its</groupId> + <artifactId>groovy-script</artifactId> + <version>1.0.0-SNAPSHOT</version> + <packaging>pom</packaging> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-scripting-plugin</artifactId> + <version>@project.version@</version> + <configuration> + <engineName>groovy</engineName> + <script> + <![CDATA[ + (1..10).sum() + ' ' + project.artifactId + ]]> + </script> + </configuration> + </plugin> + </plugins> + </build> +</project> Added: maven/plugins/trunk/maven-scripting-plugin/src/it/settings.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-scripting-plugin/src/it/settings.xml?rev=1770555&view=auto ============================================================================== --- maven/plugins/trunk/maven-scripting-plugin/src/it/settings.xml (added) +++ maven/plugins/trunk/maven-scripting-plugin/src/it/settings.xml Sun Nov 20 13:08:33 2016 @@ -0,0 +1,55 @@ +<?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. +--> + +<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> + <profiles> + <profile> + <id>it-repo</id> + <repositories> + <repository> + <id>local.central</id> + <url>@localRepositoryUrl@</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> + </repository> + </repositories> + <pluginRepositories> + <pluginRepository> + <id>local.central</id> + <url>@localRepositoryUrl@</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> + </pluginRepository> + </pluginRepositories> + </profile> + </profiles> + <activeProfiles> + <activeProfile>it-repo</activeProfile> + </activeProfiles> +</settings> Added: maven/plugins/trunk/maven-scripting-plugin/src/main/java/org/apache/maven/plugins/scripting/EvalMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-scripting-plugin/src/main/java/org/apache/maven/plugins/scripting/EvalMojo.java?rev=1770555&view=auto ============================================================================== --- maven/plugins/trunk/maven-scripting-plugin/src/main/java/org/apache/maven/plugins/scripting/EvalMojo.java (added) +++ maven/plugins/trunk/maven-scripting-plugin/src/main/java/org/apache/maven/plugins/scripting/EvalMojo.java Sun Nov 20 13:08:33 2016 @@ -0,0 +1,109 @@ +package org.apache.maven.plugins.scripting; + +/* + * 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 javax.script.ScriptContext; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import javax.script.ScriptException; + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; + +/** + * Evaluate the specified script + * + * @author Robert Scholte + * @since 3.0.0 + */ +@Mojo( name = "eval" ) +public class EvalMojo + extends AbstractMojo +{ + @Parameter( required = true ) + private String engineName; // or map extension to engineName?? + + /** + * When used, also specify the engineName + */ + @Parameter + private String script; + + // script variables + @Parameter( defaultValue = "${project}", readonly = true ) + private MavenProject project; + + private ScriptEngineManager manager = new ScriptEngineManager(); + + @Override + public void execute() + throws MojoExecutionException, MojoFailureException + { + ScriptEngine engine = null; + + if ( script != null ) + { + engine = getScriptEngine( engineName ); + + if ( engine == null ) + { + throw new MojoFailureException( "Missing scriptEngine" ); + } + } + else + { + // from file + } + + try + { + ScriptContext context = engine.getContext(); + context.setAttribute( "project", project, ScriptContext.GLOBAL_SCOPE ); + + Object result = engine.eval( script ); + + getLog().info( "Result:" ); + if ( result != null ) + { + getLog().info( result.toString() ); + } + } + catch ( ScriptException e ) + { + throw new MojoExecutionException( e.getMessage(), e ); + } + } + + private ScriptEngine getScriptEngine( String name ) + { + if ( name == null ) + { + return null; + } + else + { + return manager.getEngineByName( engineName ); + } + } +}