我通过从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>
有人能帮助我吗?
答案 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>