2012-11-14 62 views
7

我有一个java maven项目,我想用scala进行单元测试。但是,由于java和scala使用自己的编译器,我怎样才能在一个Eclipse项目中混合java和scala代码。由于这个scala代码不会在Eclipse中编译,因为java编译器需要java语法。在Eclipse中混合scala,maven和java - 单元测试

目前我的项目是基于Eclipse,他们是基于Java的项目。他们是否需要转换为不同的项目类型,例如scala?

回答

3

如果您只想从Scala测试Java代码,那么建立这样的Maven项目非常容易。由于我不是eclipse用户,我不确定它如何与eclipse一起使用。我用IntelliJ进行了测试,效果很好。 eclipse也不应该有任何问题。

我创建了一个简单的pom.xml,它只使用scala编译器进行测试,并对主要java代码使用普通的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类,我想测试:

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

最后是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") 
    } 
} 

现在,您可以使用此命令运行它:在的IntelliJ测试用例

mvn test 

我就可以点击右键并运行测试。在eclipse中也应该是可能的。

0

maven-scala-plugin可以联合编译Scala和Java代码。一般来说Scala可以从Scala 2.7开始进行联合编译。

+0

这是否意味着我需要转换我的Eclipse Java项目?请参阅问题编辑。 – user701254

+0

如果你只是使用没有maven的Scala编译器,那么加入编译应该在eclipse中工作。 –