2016-09-19 82 views
0

我想使用maven創建一個hello world應用程序。使用Maven編譯Scala

這裏是我的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>ColossusPlay</groupId> 
    <artifactId>ColossusPlay</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.3</version> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
     <groupId>com.tumblr</groupId> 
     <artifactId>colossus-metrics_2.10</artifactId> 
     <version>0.8.1-RC1</version> 
    </dependency> 
    </dependencies> 
</project> 

,這裏是我的Scala代碼:

object Main extends App{ 
    println("Helo World") 
} 

當我運行

mvn package 

它在目標生成jar文件目錄。那麼我希望能夠做的是運行使用jar文件

scala target/ColossusPlay-0.0.1-SNAPSHOT.jar 

但是我得到空指針異常這樣的:

java.lang.NullPointerException 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at scala.reflect.internal.util.ScalaClassLoader$$anonfun$tryClass$1.apply(ScalaClassLoader.scala:43) 
    at scala.reflect.internal.util.ScalaClassLoader$$anonfun$tryClass$1.apply(ScalaClassLoader.scala:43) 
    at scala.util.control.Exception$Catch$$anonfun$opt$1.apply(Exception.scala:119) 
    at scala.util.control.Exception$Catch$$anonfun$opt$1.apply(Exception.scala:119) 
    at scala.util.control.Exception$Catch.apply(Exception.scala:103) 
    at scala.util.control.Exception$Catch.opt(Exception.scala:119) 
    at scala.reflect.internal.util.ScalaClassLoader$class.tryClass(ScalaClassLoader.scala:42) 
    at scala.reflect.internal.util.ScalaClassLoader$class.tryToInitializeClass(ScalaClassLoader.scala:39) 
    at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.tryToInitializeClass(ScalaClassLoader.scala:101) 
    at scala.reflect.internal.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:63) 
    at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:101) 
    at scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:22) 
    at scala.tools.nsc.JarRunner$.run(MainGenericRunner.scala:13) 
    at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:29) 
    at scala.tools.nsc.JarRunner$.runJar(MainGenericRunner.scala:25) 
    at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:69) 
    at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:87) 
    at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:98) 
    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:103) 
    at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) 

我缺少什麼?

更新:

這個問題似乎是在Maven構建沒有看到的源文件。我試圖強制它有一個編寫錯誤寫入源文件無稽之談,但mvn包仍然說構建成功。另外當我檢查jar文件時,裏面沒有任何類文件。我如何讓maven查看源文件。

回答

1

您必須添加一個大規模的編譯器插件,例如SBT-編譯器插件

SBT compiler plugin

Example pom

<plugin> 
      <groupId>com.google.code.sbt-compiler-maven-plugin</groupId> 
      <artifactId>sbt-compiler-maven-plugin</artifactId> 
      <version>1.0.0-beta9</version> 
      <executions> 
       <execution> 
        <id>default-sbt-compile</id> 
        <goals> 
         <goal>compile</goal> 
         <goal>testCompile</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

使用在特定使用案例斯卡拉行家(型材,複雜的部署,深層次)甚至比純粹的聖誕節更好,但是一開始就有點棘手。