在Wicket上混合使用Scala和Java

时间:2010-11-05 20:37:14

标签: java maven-2 scala wicket

我们使用Wicket作为前端框架,直到现在我们的应用程序都是纯Java。但是,我想开始在我们的一些新类中使用一些Scala。旧代码将保留在Java中。

安装maven-scala-plugin,scala-library,scalatest依赖项并下载后,我不得不面对我不知道如何在Wicket中将Scala与Java混合的问题。到目前为止,我只看过有关Wicket中纯Java或纯Scala项目的教程。

在WebApplication的扩展类中,您可以使用

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

如果你使用的是Scala,你会得到像

这样的东西
def getHomePage = classOf[HomePage]

如果我有一个名为HomePageScala.scala的Scala类,如何从java代码中调用它?

如何使用调用Scala类的Java代码创建BookmarkablePageLink? e.g

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

这实际上是否可行,还是我必须使用100%java或100%scala?

非常感谢你!

2 个答案:

答案 0 :(得分: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>

我不确定,但是如果没有maven,你应该尝试这个scalac论点:

-make:transitivenocp

答案 1 :(得分:0)

我会将项目分成多模块构建。

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

这样,Java代码可以轻松引用Scala代码。 两个JAR都将包含在webapp中。

缺点:Java可以引用Scala代码,但不是相反(反之亦然)。