[JAVA] Bis Sie mit Maven ein von Scala geschriebenes Projekt erstellen und es mit dem Befehl scala ausführen.

Maven -scala run-

Da ich zum ersten Mal die Gelegenheit hatte, Maven zu benutzen, werde ich die Orte zusammenfassen, an denen ich erwischt wurde. Unter https://kengotoda.gitbooks.io/what-is-maven/primer/ erfahren Sie, wie der Maven selbst aussieht Durch das Lesen habe ich ein grobes Bild bekommen. Dieser Artikel beschreibt das Verfahren zum Erreichen der folgenden Ziele.

  1. Erstellen Sie ein Projekt mit Scala-Code
  2. Einstellungen für die Ausführung von Scala-Code in Maven
  3. Generieren und Ausführen einer JAR-Datei mit Abhängigkeiten

Die Umwelt ist ApacheMave:3.5.0 java:1.8.0 scala:2.11.6

Projekt erstellen

$ mvn archetype:generate
Choose a number or apply filter : scala
# 7: remote -> net.alchim31.maven:scala-archetype-Einfach prüfen
Choose a number or apply filter : 7
Choose a number : 3
Define value for property 'groupId': project.test
Define value for property 'artifactId': mavenTest
Define value for property 'version' 1.0-SNAPSHOT: [Enter]
Define value for property 'package' project.test: [Enter]
Y: [Enter]

Dadurch wird ein mavenTest-Ordner erstellt.

$ tree mavenTest
mavenTest/
├── pom.xml
└── src
    ├── main
    │   └── scala
    │       └── project
    │           └── test
    │               └── App.scala
    └── test
        └── scala
            └── samples
                ├── junit.scala
                ├── scalatest.scala
                └── specs.scala

Einstellungen zum Ausführen von

Wenn Sie so kompilieren, wie es ist,

$ cd mavenTest
$ mvn compile
...
[ERROR] scalac error: bad option: '-make:transitive'
[INFO]   scalac -help  gives more information
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.446 s
[INFO] Finished at: 2017-08-11T21:39:24+09:00
[INFO] Final Memory: 11M/300M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.0:compi
...

Fehler erscheint. Bearbeiten Sie daher pom.xml wie folgt.

pom.xml


<!--Löschen Sie diese Zeile-->
     <arg>-make:transitive</arg>

Dann ist die Kompilierung erfolgreich, führen Sie sie also aus. Dann bekomme ich folgenden Fehler:

$ mvn scala:run
...
[ERROR] /home/yoshiki/xgboost/jvm-packages/project/mavenTest/src/test/scala/samples/specs.scala:18: error: not found: type JUnitRunner
[ERROR] @RunWith(classOf[JUnitRunner])
[ERROR]                  ^
[ERROR] one error found
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.391 s
[INFO] Finished at: 2017-08-11T21:43:41+09:00
[INFO] Final Memory: 11M/300M
[INFO] ------------------------------------------------------------------------
...

Anscheinend war es Moos, den Testcode zu erstellen. Ändern Sie daher pom.xml wie folgt.

Übrigens: mvn compile und mvn scala: run compile und scala: run geben das Ausführungsziel an

mvn scala: run enthält mvn-Kompilierungsvorgänge. In Wirklichkeit müssen Sie also nur mvn scala: run ausführen.

pom.xml


  <dependencies>
    ...
    <!-- JUnitRunner -->
    <dependency>
        <groupId>org.specs2</groupId>
        <artifactId>specs2-junit_${scala.compat.version}</artifactId>
        <!--Version ist vor und nach specs2-Match mit Kern etc.-->
        <version>2.4.16</version>
        <scope>test</scope>
    </dependency>
    <!----------------->
    ...
  </dependencies>

Lauf

$ mvn scala:run

[WARNING] warning: there was one deprecation warning; re-run with -deprecation for details
[WARNING] one warning found
[INFO] prepare-compile in 0 s
[INFO] compile in 4 s
[INFO] 
[INFO] <<< scala-maven-plugin:3.2.0:run (default-cli) < test-compile @ mavenTest <<<
[INFO] 
[INFO] 
[INFO] --- scala-maven-plugin:3.2.0:run (default-cli) @ mavenTest ---
[WARNING] Not mainClass or valid launcher found/define

Da es keine Hauptklasse gibt, geben Sie diese im Scala-Maven-Plugin an. (Referenz: http://qiita.com/motokazu/items/57540c80509d83c6a168)

pom.xml


<!-- scala-maven-Zum Plugin hinzufügen Plugin-->
      <plugin>
        <!-- see http://davidb.github.com/scala-maven-plugin -->
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>3.2.0</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>
        <!--von hier-->
        <configuration>
          <launchers>
            <launcher>
              <id>test</id>
              <mainClass>project.test.App</mainClass>
              <args>
                <arg>${basedir}</arg>
              </args>
            </launcher>
          </launchers>
        </configuration>
        <!--Addiere hier-->
      </plugin>

Wenn mvn scala: run ausgeführt wird, wird 'Hallo Welt!' Sicher ausgegeben. Fügen Sie als Nächstes die Bibliothek, die Sie frei verwenden möchten, zu den Abhängigkeiten von pom.xml hinzu. Wenn xgboost,

pom.xml


<dependency>
  <groupId>ml.dmlc</groupId>
  <artifactId>xgboost4j</artifactId>
  <version>0.7</version>
</dependency>

Füge es so hinzu. (Um xgboost tatsächlich nutzen zu können, müssen Sie mvn im Voraus gemäß dem offiziellen Verfahren installieren.)

Ich will es nur tun

mvn scala: run kompiliert und führt die Anwendung aus, kompiliert aber auch ohne Erlaubnis. Wenn Sie es nur ausführen möchten, müssen Sie zuerst eine JAR-Datei generieren, die die abhängigen Bibliotheken enthält. aus diesem Grund Fügen Sie der pom.xml das Maven-Assembly-Plugin hinzu.

pom.xml


<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
</plugin>

Lauf

$ ls target
archive-tmp                  maven-status                                      test-classes
classes                      mavenTest-1.0-SNAPSHOT.jar                        test-classes.-2096028797.timestamp
classes.936127338.timestamp  mavenTest-1.0-SNAPSHOT-jar-with-dependencies.jar
maven-archiver               specs2-reports

$ scala -cp target/mavenTest-1.0-SNAPSHOT-jar-with-dependencies.jar project.test.App
Hello World!
concat arguments = 

Repository-URL ## hinzugefügt

<project>
  <repositories>
      <id>my-repo1</id>
      <name>central-repo</name>
      <url>https://repo.maven.apache.org/maven2/</url>
    </repository>
    <repository>
      <id>my-repo2</id>
      <name>maven2-repo</name>
      <url>https://dl.bintray.com/spark-packages/maven/</url>
    </repository>
  </repositories>
</project>

Ende.

Recommended Posts

Bis Sie mit Maven ein von Scala geschriebenes Projekt erstellen und es mit dem Befehl scala ausführen.
Bis Sie ein Spring Boot-Projekt in Intellij erstellen und an Github senden
Erstellen Sie ein Maven-Projekt mit Befehlen
Führen Sie JUnit und Spock in einem Maven-Projekt aus
Erste Schritte mit Maven (bis Sie ein Java-Projekt erstellen und externe Bibliotheken in einer einzigen ausführbaren JAR kombinieren)
21 Lesen Sie das Skript aus der Datei und führen Sie es aus
So fügen Sie mit CircleCI ein weiteres Projekt als Maven-Bibliothek hinzu und verwenden es zum Erstellen
Mit [AWS] CodeStar können Sie ein Spring (Java) -Projekt erstellen, das auf Lambda in nur 3 Minuten ausgeführt wird! !!
Stellen Sie die Sensorinformationen von Raspberry Pi in Java grafisch dar und überprüfen Sie sie mit einem Webbrowser
Generieren Sie mit TableGenerator of Hibernate (JPA) eine Seriennummer und speichern Sie diese in der ID von String.
Bis die Docker-Umgebung erstellt und der Ubuntu-Container gestartet und gestoppt wurde
[Gradle] Erstellen Sie ein Java-Projekt mit einer Konfiguration, die von der Konvention abweicht
Erstellen eines Java-Projekts mit Gradle
Herunterladen und Ausführen des Jar-Pakets direkt aus dem Maven-Repository mit nur der Befehlszeile
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Erstellen Sie mit dem Befehl cURL + tar ein Spring Boot-App-Entwicklungsprojekt
[Java] Erstellen Sie mit dem Befehl jar eine JAR-Datei, die sowohl komprimiert als auch nicht komprimiert ist
Ich habe eine Lambda-Funktion in Java geschrieben und mit SAM bereitgestellt
Bis Sie die H2-Datenbank im Servermodus mit Dropwizard mithilfe von Eclipse verwenden und eine Verbindung mit DB Viewer herstellen können.
Erstellen Sie mit dem Befehl eine JAR-Datei
Erste Schritte mit Gradle (bis Sie ein Java-Projekt erstellen und externe Bibliotheken in einer ausführbaren JAR kombinieren)
Holen Sie sich Youtube-Videoinformationen mit Retrofit und behalten Sie sie in der Android-App.
Bis Sie ein Java-Programm mit dem für Windows lokalen AWS SDK ausführen
Erstellen Sie mit Docker eine Apache- und Tomcat-Umgebung. Übrigens Maven & Java Kooperation
Ich wollte einen AP-Server starten und nur mit dem Befehl Maven debuggen
[Laravel] Befehlsmemorandum bis zum Start des Projekts
Fügen Sie mit Gradle ein Projekt in einen beliebigen Ordner ein
Docker-Befehl zum Erstellen eines Rails-Projekts in einem einzigen Schlag in einer Umgebung ohne Ruby
Was tun, wenn Sie den Befehl "Java-Paketname / Klassenname" nicht ausführen können?