Groovy无法解析java类

时间:2012-03-30 12:08:49

标签: java ant groovy

我通过从ant文件执行groovy来解决问题。

在带有启动器的Eclipse中,一切正常但是我运行ant文件时得到了以下输出:

  

Main.groovy:71:无法解析类InitializeDatabase
  [groovyc] @第71行,第40栏。[groovyc] java.lang.Object   javaClassInstance = new InitializeDatabase()
  [groovyc]

     

[groovyc] 1错误

InitializeDatabase是同一个包中的java类..

public class InitializeDatabase {

    public void test() {
        System.out.println("Hello Groovy");
    }
}

我猜这个问题位于ant文件中:

<project name="tp" basedir="." default="dbsetup">
    <target name="dbsetup">
        <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc">
            <classpath>
                <fileset dir="../files/lib/default" includes="*.jar" />
            </classpath>
        </taskdef>

        <delete dir="bin" />
        <mkdir dir="bin" />
        <groovyc srcdir="src" destdir="bin" />

        <java classname="groovy.ui.GroovyMain" dir="../.." fork="true" failonerror="true">
            <classpath>
                <fileset dir="../files/lib/default" includes="*.jar"/>
                <pathelement location="bin"/>
            </classpath>
            <arg line="build/scripts/src/build/Main.groovy" />
        </java>
    </target>

</project>

有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

您需要在javac个任务中加入groovyc任务。变化:

    <groovyc srcdir="src" destdir="bin" />

    <groovyc srcdir="src" destdir="build">
        <javac/>
    </groovyc>

它应该可以正常工作。正如says here

  

联合编译意味着Groovy编译将解析   Groovy源文件,为所有这些文件创建存根,调用Java   编译器与Java源代码一起编译存根,然后   以正常的Groovy编译方式继续编译。这允许   无约束地混合Java和Groovy文件。

...

  

正确的工作方式当然是使用嵌套标签和所有   根据需要使用属性和进一步的嵌套标记。

答案 1 :(得分:0)

这是最终文件,效果很好。 感谢tim_yates!

<target name="dbsetup">

        <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc">
            <classpath>
                <fileset dir="../files/lib/default" includes="*.jar" />
            </classpath>
        </taskdef>

        <delete dir="bin" />
        <mkdir dir="bin" />
        <groovyc srcdir="src" destdir="bin">
            <javac source="1.6" target="1.6" debug="on" />
        </groovyc>

        <java classname="groovy.ui.GroovyMain" dir="../.." fork="true" failonerror="true">
            <classpath>
                <fileset dir="../files/lib/default" includes="*.jar"/>
                <pathelement location="bin"/>
            </classpath>
            <arg line="build/scripts/src/build/access/AccessDbSetup.groovy" />
        </java>
    </target>