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.
Die Umwelt ist ApacheMave:3.5.0 java:1.8.0 scala:2.11.6
$ 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
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.
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.)
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 =
<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