2017-12-19 4 views
3

Ich beschäftige mich derzeit mit einem Projekt, das Java und Scala (Spark) mischt. Und als ob das nicht genug wäre, importieren einige meiner Abhängigkeiten weitere Versionen von Funken und Scala (nicht retro-kompatibel) ...Was ist der Unterschied zwischen Maven-Compiler-Plugin und Scala-Maven-Plugin?

Um es zusammenzufassen, hier ist das, was meine Abhängigkeitsbaum aussehen könnte:

myProjectA 
\_ myLibB 
| \_ spark 1.5.2 (excluded in my pom.xml) 
| \_ scala 2.10.4 (excluded in my pom.xml) 
\_ spark 2.2.0 (with Scala 2.11) 
| \_ scala 2.11.7 
\_ scala 2.11.11 
\_ java 8 

Nach einer kleinen Änderung auf einer Karte in meinem Projekt funktioniert die Kompilierung nicht mehr ... Zu Ihrer Information: Die Änderung bestand darin, ein Element in eine fest codierte Karte einzufügen.

Daher suche ich nach einer Lösung, um mein Projekt zu kompilieren. Ich bin zur Zeit dieser Build-Konfiguration mit:

<plugin> 
    <groupId>net.alchim31.maven</groupId> 
    <artifactId>scala-maven-plugin</artifactId> 
    <version>3.1.3</version> 
    <executions> 
     <execution> 
     <goals> 
      <goal>compile</goal> 
      <goal>testCompile</goal> 
     </goals> 
     <configuration> 
      <args> 
      <arg>-dependencyfile</arg> 
      <arg>${project.build.directory}/.scala_dependencies</arg> 
      </args> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

    <plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4.1</version> 
    <configuration> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    <executions> 
     <execution> 
     <id>make-assembly</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

Ich erkennen, dass diese andere Konfiguration ganz gut, auch nach dem Wechsel zu funktionieren scheint, dass die vorherige Konfiguration Fehler gemacht (I ersetzt die scala-maven-plugin mit den maven-compiler-plugin):

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4.1</version> 
    <configuration> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    <executions> 
     <execution> 
     <id>make-assembly</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <source>1.7</source> 
     <target>1.7</target> 
    </configuration> 
    </plugin> 

Zwei Fragen:
- Was ist der Unterschied zwischen maven-compiler-plugin und scala-maven-plugin?
- kann maven-compiler-plugin effizient kompilieren Scala-Code/Java-Scala-Code gemischt?

Antwort

1

Was ist der Unterschied zwischen Maven-Compiler-Plugin und Scala-Maven-Plugin?

Maven Compiler-Plugin ist in erster Linie zur Kompilierung von Java-Quellen. Das Scala-Plugin kann sowohl Java- als auch Scala-Quellen kompilieren. Das Maven-Compiler-Plugin wird immer das erste Plugin sein, das während der Kompilierungsphase aufgerufen wird. Es kann keine Scala-Quellen kompilieren. Die Lösungen verwenden entweder eine Vorkompilierungsphase, um scala- und java-kompatible Compiler-Plugins auszuführen. In der Tat brauchen Sie nicht Maven Compiler-Plugin, wenn Sie Scala-Plugin verwenden.

Kann Maven-Compiler-Plugin effizient kompilieren Scala-Code/Mixed Java-Scala-Code?

Kein

Bitte gehen Sie durch diese link

Verwandte Themen