2012-04-06 61 views
0

大約連續6-7個小時後,我希望有人能幫我解決我遇到的問題。 基本上我試圖開發一個包含Scala和Java代碼的Eclipse插件。不幸的是,這樣當我試圖構建插件,我得到這樣的錯誤:Scala和Java的Eclipse插件 - PDEBuilder Java代碼看不到Scala類型


文件:@ dot.log 12年4月4日19時02分49秒CEST的Eclipse編譯器Java(TM)0.A76_R36x,3.6.2,版權所有IBM Corp 2000,2010。保留所有權利。

  1. ERROR在C:\ Documents和Settings \ b96274 \ workspace_scala_akka \ TestScala \ SRC \ testscala \ Activator.java(在線路16) ScalaTest噸= 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.includes = META-INF /,\

customBuildCallbacks = customBuildCallbacks.xml

customBuildCallbacks.inheritall =真

和customBuildCallbacks.xml存儲在該項目的BUTTOM。

我已經嘗試過每晚和Scala IDE插件的穩定構建分支。也嘗試了Eclipse 3.6.2和3.7.2的新版本。 我已經得到插件工作之前,這個設置,不幸的是我似乎已經忘記了一些(基本?)的東西。

我可以使用解決方法「使用工作區中編譯的類文件」,但我需要PDE生成器來處理這個問題。 任何人都可以請幫忙,我當然會提供更多的細節,如果需要的話。

我的猜測是,Java編譯器無法看到編譯的Scala文件,因爲他們首先會稍後編譯,但這只是一個猜測。

在此先感謝。 關注Stefan Ettrup

+0

它應該工作。 「項目屬性/建設者」下有哪些建設者?我有以下內容: * Scala Builder *插件清單生成器 *擴展點架構生成器 – 2012-04-06 18:42:38

+0

嗨Iulian。按照您提到的順序,我有相同的3位建造者。您是否可以創建一個插件示例項目,在使用導出功能時它可以工作? – StefanE 2012-04-06 20:11:11

回答

0

我也在使用這種方法。基本上,我相信它不支持取決於Scala代碼的Java代碼,因爲Java編譯器必須首先運行並且失敗,甚至不會嘗試Scala編譯器。至少那是我的經驗。當然,Java代碼可以依賴於其他插件中的Scala代碼,因爲它只能從那裏看到字節碼。

+0

是否知道在Java編譯器之前是否可以運行Scala編譯器? Matthev表示Scala編譯器可以理解Java源代碼。那麼我想在Java之前編譯Scala會好嗎? – StefanE 2012-04-08 14:26:02

+0

@StefanE你可以在'pre。@ dot'目標中做到這一點。但我不知道PDE Build足夠好,可以告訴Java編譯器是否有可能編譯.class文件。 – 2012-04-09 09:58:23

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。但這很少見。

恐怕我不知道如何用螞蟻做到這一點,但我相信這是可能的。因爲在窗口 - >首選項 - > Scala->編譯器選項卡生成管理器中有一個選項,您可以選擇編譯器(混合,JavaThenScala,ScalaThenJava)。對於scala-ide,這更容易。試試這個。

+0

您最後一段的問題是「導出插件」和「導出產品」不會使用Scala IDE的構建器。所以從IDE運行時,它工作得很好,但導出失敗。 – 2012-04-06 21:38:12