groovyc的使用和maven集成

本文介绍了Groovy的编译器groovyc及其使用,与Maven项目的集成方式,包括GMavenPlus和groovy Eclipse编译器插件的优缺点,以及如何使用Maven的Ant插件编译Groovy项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值