2012-11-14 3 views
7

Ich habe ein Java Maven-Projekt, das ich mit Scala Unit Test testen möchte. Aber wie kann ich Java- und Scala-Code in einem Eclipse-Projekt mischen, da Java und Scala eigene Compiler verwenden? Aus diesem Grund wird Scala-Code in Eclipse nicht kompiliert, da der Java-Compiler Java-Syntax erwartet.Mischen von Scala, Maven und Java innerhalb von Eclipse - Unit-Test

Momentan basieren meine Projekte auf Eclipse und sie sind Java-basierte Projekte. Müssen sie in einen anderen Projekttyp wie eine Scala konvertiert werden?

Antwort

3

Wenn Sie nur Java-Code von Scala testen möchten, dann ist es ziemlich einfach, ein solches Maven-Projekt einzurichten. Da ich kein Eclipse-Benutzer bin, bin ich mir nicht sicher, wie es mit Eclipse funktioniert. Ich habe mit IntelliJ getestet und es funktioniert sehr gut. Sollte auch keine Probleme mit Eclipse sein.

Ich erstellte eine einfache pom.xml, die nur den Scala-Compiler für die Tests verwendet und den normalen Java-Compiler für den Haupt-Java-Code verwendet.

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.stackoverflow.Q13379591</groupId> 
    <artifactId>Q13379591</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <name>${project.artifactId}-${project.version}</name> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <scala.version>2.9.2</scala.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.scala-lang</groupId> 
      <artifactId>scala-library</artifactId> 
      <version>${scala.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.scalatest</groupId> 
      <artifactId>scalatest_${scala.version}</artifactId> 
      <version>2.0.M4</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.scala-tools</groupId> 
       <artifactId>maven-scala-plugin</artifactId> 
       <version>2.15.2</version> 
       <executions> 
        <execution> 
         <id>scala-test-compile</id> 
         <phase>test-compile</phase> 
         <goals> 
          <goal>testCompile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <args> 
         <arg>-g:vars</arg> 
         <arg>-make:transitive</arg> 
         <arg>-dependencyfile</arg> 
         <arg>${project.build.directory}/.scala_dependencies</arg> 
        </args> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.scalatest</groupId> 
       <artifactId>scalatest-maven-plugin</artifactId> 
       <version>1.0-M2</version> 
       <configuration> 
        <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory> 
        <junitxml>.</junitxml> 
        <filereports>WDF TestSuite.txt</filereports> 
        <stdout>W</stdout> <!-- Skip coloring output --> 
       </configuration> 
       <executions> 
        <execution> 
         <id>scala-test</id> 
         <goals> 
          <goal>test</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Jetzt ist hier eine einfache Java-Klasse, die ich testen wollen:

src/main/java/com/stackoverflow/Hello.java

package com.stackoverflow; 

/** 
* @author maba, 2012-11-14 
*/ 
public interface Hello { 
    String hello(); 
} 

src/main/java/com/stackoverflow/HelloJava.java

package com.stackoverflow; 

/** 
* @author maba, 2012-11-14 
*/ 
public class HelloJava implements Hello { 

    public String hello() { 
     return "Hello Java"; 
    } 
} 

Und schließlich die ScalaTest-Testklasse.

src/test/scala/com/stackoverflow/HelloJavaTest.scala

package com.stackoverflow 

import org.scalatest.FlatSpec 

/** 
* @author maba, 2012-11-14 
*/ 
class HelloJavaTest extends FlatSpec { 
    "HelloJava" should "be instance of Hello" in { 
    val hello = new HelloJava 
    val result = hello match { 
     case f:Hello => true 
    } 
    assert(result) 
    } 

    it should "say Hello Java" in { 
    val helloJava = new HelloJava 
    assert(helloJava.hello === "Hello Java") 
    } 
} 

Jetzt können Sie es mit diesem Befehl:

mvn test 

Ich kann einfach Rechtsklick auf den Testfall in IntelliJ und den Test ausführen. Es sollte auch in der Finsternis möglich sein.

0

Das maven-scala-plugin kann gemeinsam Scala und Java Code kompilieren. Scala im Allgemeinen kann seit Scala 2.7.

+0

Bedeutet das, dass ich mein Eclipse-Java-Projekt konvertieren muss? Bitte siehe Frage bearbeiten. – user701254

+0

Wenn Sie nur den Scala-Compiler ohne Maven verwenden, sollte die Join-Kompilierung in Eclipse funktionieren. –

Verwandte Themen