【问题标题】:Eclipse plugin with Scala and Java - PDEBuilder Java code can't see Scala types带有 Scala 和 Java 的 Eclipse 插件 - PDEBuilder Java 代码看不到 Scala 类型
【发布时间】:2012-04-06 07:41:23
【问题描述】:

连续大约 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 个错误)

我定义的两个类是:

“Activator.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

【问题讨论】:

  • 它应该可以工作。您在“项目属性/构建器”下有哪些构建器?我有以下内容:* Scala Builder * Plug-in Manifest Builder * Extension Point Schema builder
  • 嗨尤利安。我有与您提到的相同顺序的 3 个构建器。您是否能够创建一个插件示例项目,在使用导出功能时这会起作用吗?

标签: scala ant eclipse-plugin eclipse-pde


【解决方案1】:

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

【讨论】:

  • 您知道是否可以在 Java 编译器之前运行 Scala 编译器? Matthev 说 Scala 编译器可以理解 Java 源代码。那我猜想在Java之前编译Scala可以吗?
  • @StefanE 您可以在pre.@dot 目标中执行此操作。但是我对 PDE Build 的了解还不够,无法判断是否可以将已编译的 .class 文件告诉 Java 编译器。
【解决方案2】:

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)。也试试这个。

【讨论】:

  • 最后一段的问题是“导出插件”和“导出产品”使用 Scala IDE 的构建器。因此从 IDE 运行时效果很好,但导出失败。
猜你喜欢
  • 2017-10-21
  • 1970-01-01
  • 2011-02-26
  • 2020-05-22
  • 2011-08-06
  • 2014-12-27
  • 2012-11-20
  • 2011-04-16
  • 2015-12-31
相关资源
最近更新 更多