0

连续大约 6-7 小时后,我希望有人可以帮助我解决我遇到的问题。基本上我正在尝试开发一个包含 Scala 和 Java 代码的 Eclipse 插件。不幸的是,当我尝试构建插件时,我得到了这种错误:


文件:@dot.log 04-04-12 19:02:49 CEST Eclipse Compiler for Java(TM) 0.A76_R36x, 3.6.2,版权所有 IBM Corp 2000, 2010。保留所有权利。

  1. C:\Documents and Settings\b96274\workspace_scala_akka\TestScala\src\testscala\Activator.java 中的错误(第 16 行)ScalaTest t = null; ^^^^^^^^^ ScalaTest 无法解析为类型

1 个问题(1 个错误)

我定义的两个类是:

“激活器.java”

package testscala;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

private static BundleContext context;

static BundleContext getContext() {
    return context;
}

public void start(BundleContext bundleContext) throws Exception {
    Activator.context = bundleContext;
    ScalaTest t = null;
}

public void stop(BundleContext bundleContext) throws Exception {
    Activator.context = null;
}
}

“ScalaTest.scala”包testscala

class ScalaTest {
  val t = "whatever"
}

我首先将插件创建为插件项目,然后将 Scala 特性添加到其中。为了通知我使用的 scala 的 PDE 构建器:http: //www.michel-kraemer.com/scala-projects-with-eclipse-pde-build-2 Michel Kraemers 非常出色的构建文件。

我的 build.properties 文件是:

来源.. = src/

输出.. = bin/

bin.includes = META-INF/,\

.

customBuildCallbacks=customBuildCallbacks.xml

customBuildCallbacks.inheritall=true

并且 customBuildCallbacks.xml 存储在项目的底部。

我尝试过使用 Scala IDE 插件的 nightly 和 stable build 分支。还尝试了 Eclipse 3.6.2 和 3.7.2 的新版本。我以前用这个设置得到了插件,不幸的是我似乎忘记了一些(基本的?)东西。

我可以使用解决方法“使用在工作区中编译的类文件”,但我需要 PDE 构建器来处理它。任何人都可以请帮助,如果需要,我当然会提供更多详细信息。

我的猜测是 Java 编译器看不到已编译的 Scala 文件,因为它们首先会稍后编译,但这只是一个猜测。

提前致谢。问候 Stefan Ettrup

4

2 回答 2

0

我也在使用这种方法。基本上,我相信它不支持依赖于 Scala 代码的 Java 代码,因为 Java 编译器必须首先运行并且它失败了,甚至没有尝试过 Scala 编译器。至少那是我的经验。当然,Java 代码可以依赖于其他插件中的 Scala 代码,因为它只能从那里看到字节码。

于 2012-04-06T09:49:07.913 回答
0

java 编译器不理解 scala 文件,但 scala 编译器解析/理解 java 文件。然而,scala 编译器不编译java 文件,它只编译 scala 文件。因此,要编译一个组合的 java/scala 插件,您通常必须:

1)编译你的scala,包括你的java源代码树。这会为您的 scala 文件生成 .class 文件。2)编译你的java,包括上面生成的.class文件。这将为您的 java 文件生成 .class 文件。任何依赖于 scala 类的 java 都应该被正确编译。

所以先做scala编译。有时,您需要添加第三步,使用 java 编译器生成的类文件再次编译您的 scala。但这种情况很少见。

恐怕我不知道如何用 ant 做到这一点,但我相信这是可能的。

对于 scala-ide,这更容易,因为在 Window->Preferences->Scala->Compiler 选项卡 Build manager 中有一个选项,可以选择 compileorder (Mixed, JavaThenScala, ScalaThenJava)。试试这个。

于 2012-04-06T18:23:25.100 回答