1.groovyc–groovy的编译器
groovyc 是 Groovy 编译器的命令行工具。它允许你编译Groovy源文件成二进制文件。它的作用相当于JAVA中的javac。以下的命令行是一种最简单的方式去编译Groovy的脚本和类:
groovyc MyClass.groovy
这将生成MyClass.class文件(另外,其他的class文件根据源文件的内容来生成
groovyc也支持许多命令行选项
缩写 | 全称 | 说明 | 示例 |
---|---|---|---|
-cp | -classpath, --classpath | 指定编译的classpath,必须作为第一个参数 | groovyc -cp lib/dep.jar MyClass.groovy |
- | –sourcepath | 指定源文件的目录,现在不再使用,指定这个参数不再有任何效果 | - |
- | –temp | 编译器的临时目录 | - |
- | –encoding | 设置源文件的编码 | groovyc --encoding utf-8 script.groovy |
- | –help | 提供命令行选项的说明 | groovyc --help |
-d | - | 指定放置生成的类文件的位置 | groovyc -d target Person.groovy |
-v | - | 展示编译器的版本 | groovyc -v |
-e | –exception | 在编译错误的情况下显示堆栈跟踪 | groovyc -e script.groovy |
-j | –jointCompilation* | 启用联合编译 | groovyc -j A.groovy B.java |
-b | –basescript | 脚本的基类名称(必须从脚本派生) | |
-indy | –indy | 启用InvokedDynamic支持。要求Java 7 + | groovyc --indy Person.groovy |
- | –configscript | 高级编译器配置脚本 | groovyc --configscript config/config.groovy src/Person.groovy |
-Jproperty=value | - | 如果启用联合编译,属性能被这样传送 | groovyc -j -Jtarget=1.6 -Jsource=1.6 A.groovy B.java |
-Fflag | - | 如果启用联合编译,标志能被这样传送 | groovyc -j -Fnowarn A.groovy B.java |
-pa | –parameters | 生成元数据以反映方法参数名称。需要Java 8 +。 | groovyc --parameters Person.groovy |
-pr | –enable-preview | 启用预览Java特性(JEP 12)(仅JDK12+) | groovy --enable-preview Person.groovy |
@argfile | - | 从指定文件读取选项和源文件 | groovyc @conf/args |
2.与maven集成
在Maven项目中有几种编译groovy代码的方法。++GMavenPlus++ 是最灵活和功能最齐全的,但与大多数Groovy编译器工具一样,它可能不适用JavaGroovy项目(像GMAVEN和Gradle一样存在相同问题)。用于Maven的groovy Eclipse编译器插件回避了联合编译问题。阅读本文,深入讨论这两种方法的优点和缺点。
第三种方法是使用Maven的Ant插件来编译一个groovy项目。注意,在下面的示例中,Ant插件绑定到构建的编译和测试编译阶段。它将在这些阶段中被调用,所包含的任务将被执行,这些任务将在源目录和测试目录上运行groovy编译器。由此产生的Java类将与Java源中的任何标准Java类共存并被对待,将与JRE或JUnit运行时没有任何不同。
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycomp.MyGroovy</groupId>
<artifactId>MyGroovy</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Maven Example building a Groovy project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.5.0</version>
<type>pom</type> <!-- required JUST since Groovy 2.5.0 -->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<configuration>
<tasks>
<mkdir dir="${basedir}/src/main/groovy"/>
<taskdef name="groovyc"
classname="org.codehaus.groovy.ant.Groovyc">
<classpath refid="maven.compile.classpath"/>
</taskdef>
<mkdir dir="${project.build.outputDirectory}"/>
<groovyc destdir="${project.build.outputDirectory}"
srcdir="${basedir}/src/main/groovy/" listfiles="true">
<classpath refid="maven.compile.classpath"/>
</groovyc>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<configuration>
<tasks>
<mkdir dir="${basedir}/src/test/groovy"/>
<taskdef name="groovyc"
classname="org.codehaus.groovy.ant.Groovyc">
<classpath refid="maven.test.classpath"/>
</taskdef>
<mkdir dir="${project.build.testOutputDirectory}"/>
<groovyc destdir="${project.build.testOutputDirectory}"
srcdir="${basedir}/src/test/groovy/" listfiles="true">
<classpath refid="maven.test.classpath"/>
</groovyc>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
这假设您有一个带有Groovy子文件夹的Maven项目设置,作为Java src和test子文件夹的对等点。您可以使用Java /Jar原型来设置这一点,然后将Java文件夹重命名为Groovy或保留Java文件夹并只创建Groovy对等文件夹。还有一个groovy插件,它还没有在生产中测试或使用。在如上示例中定义了构建部分之后,您可以正常调用典型的Maven构建阶段。例如,MVN测试将执行测试阶段,编译groovy源代码和groovy测试源代码,最后执行单元测试。如果运行mvn jar,它将在所有单元测试通过后执行jar阶段,将所有编译的生产类绑定到一个jar中。有关Maven构建阶段的更多详细信息,请参阅Maven2文档。