使用Ant构建包含Scala和Java源文件混合的项目-非法循环引用错误

阿里夫·帕坦

目前,我正在尝试使用Ant构建一个现有的Java项目,以尝试使用混合源(Java和Scala)进行构建。

我有一个Java接口定义为- public interface One<T extends Two<? super T>>

当我从Ant构建运行scalac时,出现以下错误:

错误:涉及类型T的非法循环引用。

由于我希望Scala和Java类在我的项目中相互依赖,因此我首先运行scalac任务,然后再在Ant构建中运行javac。我的scalac块如下所示:

<scalac srcdir="${src.path}" destdir="${build.classes}" encoding="UTF-8" >
        <classpath refid="compile.classpath" />
        <include name="**/*.scala"/>
        <include name="**/*.java"/>
</scalac> 

有什么办法可以解决这个问题?我无法修改Java代码,因为还有很多其他代码正在使用它。

我正在使用Java 7和Scala 2.11.5


这是我最后看到的:

com.arif.One.java

package com.arif.java;
public interface One<T extends One<? super T>> {
    void test1();
}

com.arif.Two.java

package com.arif.java;
public class Two implements One<Two> {
    @Override
    public void test1() {
    } 
}

com.arif.scala.Main.scala

package com.arif.scala
import com.arif.java.Two

object Main {
  def main(args:Array[String]) {
    var b:Two = null
  } 
}

build.xml

<property name="scala.home" value="/Users/arif/software/scala/scala-2.11.5"/>
<property name="build.classes" value="./build/classes"/>

<property name="src.path" value="src"/>
<property name="javac.target" value="1.7"/>
<property name="compile.debug" value="true" />
<property name="compile.deprecation" value="false" />
<property name="compile.optimize" value="false" />

<path id="compile.classpath">
    <fileset dir="${scala.home}/lib" includes="*.jar" />
</path>

<path id="scala.classpath">
    <pathelement location="${scala.home}/lib/scala-compiler.jar" />
    <pathelement location="${scala.home}/lib/scala-library.jar" />
    <pathelement location="${scala.home}/lib/scala-reflect.jar" />
</path>

<target name="init">
    <taskdef resource="scala/tools/ant/antlib.xml">
        <classpath refid="scala.classpath" />
    </taskdef>
</target>

<target name="build" description="build" depends="init">
    <scalac srcdir="${src.path}" destdir="${build.classes}" encoding="UTF-8" >
        <classpath refid="compile.classpath" />
        <include name="**/*.scala"/>
        <include name="**/*.java"/>
    </scalac>
    <javac srcdir="${src.path}" destdir="${build.classes}" memoryinitialsize="512m" target="${javac.target}" source="${javac.target}" 
        memorymaximumsize="1024m" nowarn="true" debug="${compile.debug}" deprecation="${compile.deprecation}" 
        optimize="${compile.optimize}" fork="true" encoding="iso-8859-1" includeantruntime="false">
        <classpath refid="compile.classpath" />
    </javac>
</target>

从项目根目录中的命令行-执行“ ant build”会得到以下结果-

[scalac] Compiling 1 scala and 2 java source files to /Users/arif/rbc/scala-java/build/classes
[scalac] /Users/arif/rbc/scala-java/src/com/arif/java/One.java:3: error: illegal cyclic reference involving type T
[scalac] public interface One<T extends One<? super T>> {
[scalac]                                    ^
[scalac] one error found
克里斯托弗·柯里

PRSI-4744中提到的实验标志-Ybreak-cycles,可能有助于这个问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用ʻimport type`语句修复循环依赖引用错误

为什么在使用带有类名的静态变量时未显示非法前向引用错误

使用for循环嵌套下拉列表会导致陈旧元素引用错误

如何使用带有OFFSET的ARRAYFORMULA到上一行而不出现循环引用错误

使用递归类型别名会产生循环引用错误

javascript 错误:尝试使用 Selenium 和 Python 检索 navigator.plugins 时出现循环引用错误

Scala JS @JSGlobal对象引用错误

JAVA方法中的引用错误

使用哈希引用时出现严格引用错误

解决scala中错误的前向引用错误

特征归约示例未使用错误 C2100 非法间接构建

Scala Builder模式:涉及类型T的非法循环引用

使用ES6代理和node.js的非法调用错误

Blazor WASM 项目引用错误 (BLAZORSDK1001)

React.scala 中的 ScalaJSReact 未捕获的引用错误

静态最终字段的非法前向引用错误

正则表达式引用错误的CSV文件

未捕获的引用错误(无法读取JSON文件)

curl: (3) URL 使用错误/非法格式或缺少 URL

Python和MySQL-执行查询时引用错误

C#SMO和SqlEnum引用错误

Android SQLite和外键无引用错误

发出严重的“引用错误”和“找不到任务”

JS 和 HTML 之间未捕获的引用错误

Java非静态变量引用错误?

Java:无法对非静态方法进行静态引用错误

尝试使用TTS时出现“空对象引用错误”

使用C ++的Array中的非静态成员引用错误

使用List.FindAll的对象引用错误