现状: 我正在将构建系统从Ant迁移到Gradle。目前我遇到了类路径和构建路径的问题。这是当前的Ant编译目标定义:
<target name="compile">
<mkdir dir="${build.compile.target}/classes" />
<javac srcdir="${src}" destdir="${build.compile.target}/classes">
<classpath>
<fileset dir="${build.war}/WEB-INF/lib">
<include name="**/*.jar" />
</fileset>
<pathelement location="${build.war}/WEB-INF/classes" />
</classpath>
</javac>
</target>
开发人员通常执行以下setup-local目标来构建war文件等。
<target name="setup-local" depends="clean">
<antcall target="copy_webapp" />
<antcall target="compile" />
copy_webapp目标是将目录中的.jar和.class文件复制到$ {build.war}目录中。不幸的是,这个拷贝目标确实是需要的,因为它对文件进行了相关修改(它将文件从两个目录合并为一个,覆盖和文件修改。它是遗留代码,没有任何注释。我真的不想对它进行研究和找出原因是什么)
对我来说问题是: 在类路径中有一个文件引用,只有在事先执行copy_webapp目标时才存在。足够公平 - 如果我总是只执行setup-local目标,那么这是有效的。
现在迁移到Gradle并将项目导入Eclipse后,我的.java文件中出现了数千个错误,说无法解析导入。好吧,当然不是。在构建路径中是不存在的文件(f.e.“$ {build.war} / path / to / jar”)。
我不知道如何解决这些错误。我是否需要重构我的类路径,以便之前不依赖于copy_webapp目标?或者我可以以某种方式(使用Gradle)修改构建路径,它首先必须解析copy_webapp目标吗?
答案 0 :(得分:0)
鉴于这些信息,您很难找到问题的根源。
一种选择是创建一个&#34; staging&#34;当您有一个Gradle任务生成Eclipse部署项目所需的复杂目录结构和/或中间输出时,Eclipse项目的目录。
我解决这个问题的方法是创建一个在调用gradle eclipse
时运行的子任务。在任务配置中添加行it.dependsOn eclipse
。此任务的输出将进入build/eclipse/TaskName
或build/
目录中的某个描述性位置。然后应更新类路径引用以指向build/
目录下的输出目录位置。
此外,您可能必须对eclipse
任务正在使用的类路径条目进行后处理,以生成项目类路径,以便它们正确引用任务输出位置。