Смешивание Scala и Java на калитке - PullRequest
1 голос
/ 05 ноября 2010

Мы используем Wicket в качестве нашего интерфейса, и до сих пор наше приложение было чисто Java. Тем не менее, я хотел бы начать использовать немного Scala в некоторых наших новых классах. Старый код останется на Java.

После установки плагина maven-scala-plugin, библиотеки scala, масштабируемых зависимостей и их загрузки мне пришлось столкнуться с проблемой, заключающейся в том, что я не знаю, как смешивать Scala с Java в Wicket. До сих пор в Wicket я видел только учебники по проектам на чистой Java или на чистом Scala.

В расширенном классе WebApplication у вас есть что-то вроде

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

и если вы используете Scala, у вас будет что-то вроде

def getHomePage = classOf[HomePage]

Если у меня есть класс Scala под названием HomePageScala.scala, как я могу вызвать его из кода Java?

Как я могу создать BookmarkablePageLink, используя Java-код, вызывающий класс Scala? * например 1013 *

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

Это вообще возможно, или мне нужно использовать либо 100% java, либо 100% scala?

Заранее большое спасибо!

Ответы [ 2 ]

2 голосов
/ 07 ноября 2010

Возможно сделать перекрестную ссылку между 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 вам стоит попробовать этот скалярный аргумент:

-make:transitivenocp
0 голосов
/ 05 ноября 2010

Я бы разделил проект на многомодульную сборку.

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

Таким образом, код Java может легко ссылаться на код Scala.Оба JAR-файла будут включены в веб-приложение.

Недостаток: Java может ссылаться на код Scala, но не наоборот (или наоборот).

...