2016-09-19 4 views
0

Я хочу создать приложение hello world, используя maven.Компиляция Scala с использованием Maven

вот мой 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 

он создает файл фляги в мишени каталог. Тогда то, что я хочу быть в состоянии сделать, это запустить файл банку с помощью

scala target/ColossusPlay-0.0.1-SNAPSHOT.jar 

Однако я получаю NullPointer исключение, как это:

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) 

Что мне не хватает?

Update:

Проблема, кажется, что Maven сборки не видит исходные файлы. Я попытался заставить его иметь ошибку сборки, записывающую nonesense в исходный файл, но пакет 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> 

Использование Maven с Скале в конкретном случае использования (профили, сложные развертывания, глубокая иерархия) даже лучше, чем чистый sbt, но в начале немного сложнее.

Смежные вопросы