Executes scripts in maven build. This plugin is based on 'JSR 223: Scripting for the Java Platform'.
script:execute: executes scripts
| Option | Default Value | Explanation |
|---|---|---|
| engine | javascript | script engine name. e.g. rhino, nashorn, ruby. It is passed to ScriptEngineManager.getEngineByName(). The goal script:list is available to confirm the engine name. |
| arguments | [] | command line arguments for the script. sytem property: scriptmvn.arguments |
| script | inline script. | |
| scriptFile | script file name to be executed. If it starts with jar:, http://, https:// or file:, then it is treated as URL. see javadoc of URL and JarURLConnection. If a relative path is given, it is treated as a relative path to the project basedir. |
|
| scriptFiles | list of script files to be executed | |
| prefix | mvn | the global variable name to access the maven environment. If empty, no global variable for this purpose is created. |
| globalProject | true | use global variable project. |
| globalSettings | true | use global variable settings. |
| globalLog | true | use global variable log. |
- By default,
project, settings, log, and mvnare available. - project
- settings
- log
- wrapper for org.apache.maven.plugin.logging.Log
- mvn
| member | description |
|---|---|
| project | same as above |
| settings | same as above |
| log | same as above |
| session | org.apache.maven.execution.MavenSession |
| mojo | org.apache.maven.plugin.MojoExecution |
| arguments | String array provided by arguments property. |
| scriptFile | current executing script file |
| public void fail(String msg) throws MojoExecutionException | fails build with message. |
| public void fail() throws MojoExecutionException | fails build with default message. |
pom.xml
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>javascript</engine>
<script>
log.info("hello from pom");
</script>
</configuration>
</plugin>execution
$ mvn script:execute
pom.xml
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>javascript</engine>
<script>
<![CDATA[
log.info("hello form cdata");
for(var i = 0; i < mvn.arguments.length; i++) {
log.info(mvn.arguments[i]);
}
]]>
</script>
</configuration>
</plugin>The complex inline script should be contained by XML CDATA section.
pom.xml
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>javascript</engine>
<script>
<![CDATA[
log.info("fail test");
mvn.fail("test fail");
]]>
</script>
</configuration>
</plugin>If the build should be failed, a MojoExecutionException can be thrown by mvn.fail().
pom.xml
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>execute</goal>
</goals>
</execution>
</executions>
<configuration>
<engine>javascript</engine>
<script>
log.info("hello from pom");
</script>
</configuration>
</plugin>The script is executed in prepare-pakcage phase.
$ mvn install
- This plugin sets ScriptEngine.FILENAME and ScriptEngine.ARGV to script engines, but many engines ignore these properties.
- jruby supports both properties.
- The filename and command line arguments can be accessed via the global variable
mvn.
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>ruby</engine>
<script>
p $mvn.scriptFile
p $0
p $mvn.arguments
p ARGV
</script>
<arguments>
<argument>aaa</argument>
<argument>xyz</argument>
</arguments>
</configuration>
<dependencies>
<dependency>
<groupId>org.jruby</groupId>
<artifactId>jruby-complete</artifactId>
<version>1.7.19</version>
</dependency>
</dependencies>
</plugin>execution
$ mvn script:execute
The arguments can be passed by command line.
$ mvn -Dscriptmvn.arguments="123,zzz" script:execute
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>javascript</engine>
<scriptFiles>
<scriptFile>src/main/javascript/libA.js</scriptFile>
<scriptFile>src/main/javascript/libB.js</scriptFile>
</scriptFiles>
<scriptFile>src/main/javascript/hello.js</scriptFile>
<script>
log.info("hello from pom");
</script>
<arguments>
<argument>aaa</argument>
<argument>xyz</argument>
</arguments>
</configuration>
</plugin>The elements script, scriptFile and scriptFiles can be put any order.
But the execution order is alway s scriptFiles, scriptFile, script.
javascript
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>javascript</engine>
<script>
log.info("hello from pom");
log.info(project.name);
log.info(project.version);
log.info(project.basedir);
log.info(project.build.finalName);
log.info(project.build.directory);
log.info(project.build.outputDirectory);
log.info(settings.localRepository);
log.info(mvn.session.executionRootDirectory);
</script>
<arguments>
<argument>aaa</argument>
<argument>xyz</argument>
</arguments>
</configuration>
</plugin>javascript from file
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>javascript</engine>
<scriptFile>src/main/javascript/hello.js</scriptFile>
<arguments>
<argument>aaa</argument>
<argument>xyz</argument>
</arguments>
</configuration>
</plugin>javascript from multile files
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>javascript</engine>
<scriptFiles>
<scriptFile>src/main/javascript/libA.js</scriptFile>
<scriptFile>src/main/javascript/libB.js</scriptFile>
</scriptFiles>
<arguments>
<argument>aaa</argument>
<argument>xyz</argument>
</arguments>
</configuration>
</plugin>rhino for jdk8 or later
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>javascript</engine>
<scriptFile>src/main/javascript/hello.js</scriptFile>
<arguments>
<argument>aaa</argument>
<argument>xyz</argument>
</arguments>
</configuration>
<dependencies>
<dependency>
<groupId>de.christophkraemer</groupId>
<artifactId>rhino-script-engine</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
</plugin>ruby
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>ruby</engine>
<script>
puts("hello ruby from pom " + $project.basedir.toString);
</script>
<arguments>
<argument>aaa</argument>
<argument>xyz</argument>
</arguments>
</configuration>
<dependencies>
<dependency>
<groupId>org.jruby</groupId>
<artifactId>jruby-complete</artifactId>
<version>1.7.19</version>
</dependency>
</dependencies>
</plugin>groovy
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>groovy</engine>
<script>
log.info("hello groovy " + project.basedir.toString());
</script>
<arguments>
<argument>aaa</argument>
<argument>xyz</argument>
</arguments>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
</plugin>python
<plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>python</engine>
<script>
log.info("hello python " + project.basedir.toString());
</script>
<arguments>
<argument>aaa</argument>
<argument>xyz</argument>
</arguments>
</configuration>
<dependencies>
<dependency>
<groupId>org.python</groupId>
<artifactId>jython</artifactId>
<version>2.5.3</version>
</dependency>
</dependencies>
</plugin> <plugin>
<groupId>io.github.yas99en</groupId>
<artifactId>script-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<engine>rhino</engine>
<arguments>
<argument>aa</argument>
<argument>xx</argument>
</arguments>
<script>
log.info("hello from pom");
var ant = new Packages.groovy.util.AntBuilder();
ant.invokeMethod("echo", "hello");
ant.invokeMethod("copy", {file: "pom.xml", tofile: "copied"});
ant.invokeMethod("delete", {file: "copied"});
</script>
</configuration>
<dependencies>
<dependency>
<groupId>de.christophkraemer</groupId>
<artifactId>rhino-script-engine</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.4</version>
</dependency>
</dependencies>
</plugin>
script:cli: executes scripts. It is almost same asscript:execute. But it is intended to be used from command line.project.versioncan be got as follows:- It does not require the configuration in pom.xml.
- But if the engine other than javascript is needed, the configuration in pom.xml is required.
$ mvn -q io.github.yas99en:script-maven-plugin:1.0.0:cli -Dscriptmvn.cli.script='Packages.java.lang.System.out.println(project.version);'
The followings can be specified by only the system properties. The maven expression can not be used in these properties.
| Option | Default Value | Explanation |
|---|---|---|
| scriptmvn.cli.engine | javascript | script engine name. |
| scriptmvn.cli.script | inline script. | |
| scriptmvn.cli.scriptFile | script file name. If a relative path is given, it is treated as a relative path to current directory. | |
| scriptmvn.cli.scriptFiles | commna separated script file names. | |
| scriptmvn.cli.arguments | commna separated arguments. |
script:echo: echos a message.- This goal uses only the native maven mechanism, does not use any scripting engine.
project.versioncan be got as follows:
$ mvn -q io.github.yas99en:script-maven-plugin:1.0.0:echo -Dscriptmvn.echo.message='${project.version}'
The followings can be specified by only the system properties.
| name | Default Value | Explanation |
|---|---|---|
| scriptmvn.echo.message | message to be printed. The maven expression can be used. | |
| scriptmvn.echo.output | out | specifies the output method. "out": uses System.out.println. "err" uses System.err.println. "log" uses the maven log info. |
script:list: list all script engine information. Any one ofNamescan be used as the optionengine.
If the configuration for this plugin is in pom.xml,
$ mvn script:list
If not,
$ mvn -q io.github.yas99en:script-maven-plugin:1.0.0:list