2012-11-14 13 views
7

私はscalaで単体テストしたいjava mavenプロジェクトを持っています。しかし、Javaとscalaは独自のコンパイラを使用しているので、どのように1つのEclipseプロジェクト内でJavaとscalaコードを混在させることができますか?このため、JavaコンパイラはJava構文を必要とするため、このスカラ・コードはEclipseでコンパイルされません。Eclipse内でscala、maven、javaを混在させる - ユニットテスト

現在、私のプロジェクトはEclipseに基づいており、Javaベースのプロジェクトです。彼らはスカラのような異なるプロジェクトタイプに変換する必要がありますか?

答えて

3

JavaコードをScalaからテストする場合は、このようなMavenプロジェクトをセットアップするのは簡単です。私はEclipseユーザーではないので、Eclipseとどのように動作するのか分かりません。私はIntelliJでテストしました。とてもうまく動作します。日食にも問題はありません。

私はシンプルなpom.xmlを作成しました。テスト用にscalaコンパイラを使用し、メインJavaコードには通常のjavaコンパイラを使用しています。

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

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> 

は今ここに私がテストしたいことを簡単なJavaクラスです

package com.stackoverflow; 

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

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

最後にScalaTestテストクラス。

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") 
    } 
} 

あなたは今、このコマンドでそれを実行することができます。

mvn test 

私はちょうど右のIntelliJでテストケースをクリックして、テストを実行することができます。日食でも可能でなければなりません。

0

maven-scala-pluginは、ScalaとJavaコードの共同編集ができます。 Scalaは一般的に、Scala 2.7以降の共同編集を行うことができます。

+0

Eclipse Javaプロジェクトを変換する必要がありますか?質問編集をご覧ください。 – user701254

+0

mavenなしでScalaコンパイラを使用するだけであれば、joinコンパイルはeclipseで動作するはずです。 –

関連する問題