2010-11-05 34 views
1

我們使用Wicket作爲我們的前端框架,直到現在我們的應用程序是純Java。不過,我想開始在我們的一些新類中使用一些Scala。舊的代碼將留在Java中。在Wicket上混合Scala和Java

安裝完maven-scala-plugin,scala-library,scalatest dependencies並下載它們後,我不得不面對這個問題,我不知道如何在Wicket中混合使用Scala和Java。到目前爲止,我只看到了有關Wicket中純Java或純Scala項目的教程。

在擴展類的WebApplication的你有什麼事情,如

public Class<? extends Page> getHomePage() { 
    return HomePage.class; 
} 

,如果你正在使用Scala的你將有一些諸如

def getHomePage = classOf[HomePage] 

如果我有一個叫做HomePageScala Scala的類。我怎樣才能從Java代碼中調用它?

如何使用調用Scala類的Java代碼創建BookmarkablePageLink? e.g

add(new BookmarkablePageLink<HomePageScala>("homePageScala", HomePageScala.class)); 

這是真正甚至有可能還是我必須爲使用100%的Java或100%Scala呢?

非常感謝您提前!

回答

0

我會將項目分成多模塊版本。

root 
    -- scala (jar) 
    -- java (jar) <dependency><artifactId>scala</artifactId></dependency> 
    -- webapp (war) <dependency><artifactId>java</artifactId></dependency> 

這樣Java代碼就可以輕鬆引用Scala代碼。 這兩個JAR都將包含在Web應用程序中。

缺點:Java可以引用Scala代碼,但不能反過來(反之亦然)。

2

可以在Scala和Java代碼之間進行交叉引用。如果您使用maven,請嘗試此配置。使用Scala測試的2.8.0:

<plugins> 
     <plugin> 
      <groupId>org.scala-tools</groupId> 
      <artifactId>maven-scala-plugin</artifactId> 
      <version>2.14.1</version> 
      <executions> 
       <execution> 
        <id>compile</id> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
        <phase>compile</phase> 
       </execution> 
       <execution> 
        <id>test-compile</id> 
        <goals> 
         <goal>testCompile</goal> 
        </goals> 
        <phase>test-compile</phase> 
       </execution> 
       <execution> 
        <phase>process-resources</phase> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <scalaVersion>${scala.version}</scalaVersion> 
       <args> 
        <arg>-target:jvm-1.5</arg> 
        <!-- to support mix java/scala only --> 
        <arg>-make:transitivenocp</arg> 
        <arg>-dependencyfile</arg> 
        <arg>${project.build.directory}/.scala_dependencies</arg> 
       </args> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <compilerVersion>1.6</compilerVersion> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 

我不知道,但認爲,如果沒有行家,你應該試試這個scalac說法:

-make:transitivenocp 
+0

聽起來不錯(+1) – 2010-11-08 13:10:58