Comme j'ai eu l'occasion d'utiliser maven pour la première fois, je vais résumer les endroits où je me suis fait prendre. Voir https://kengotoda.gitbooks.io/what-is-maven/primer/ pour voir à quoi ressemble maven lui-même J'ai eu une image approximative en lisant. Cet article décrit la procédure pour atteindre les objectifs suivants.
L'environnement est 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-Vérifier simple
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]
Cela créera un dossier mavenTest.
$ tree mavenTest
mavenTest/
├── pom.xml
└── src
├── main
│ └── scala
│ └── project
│ └── test
│ └── App.scala
└── test
└── scala
└── samples
├── junit.scala
├── scalatest.scala
└── specs.scala
Si vous compilez tel quel,
$ 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
...
Une erreur apparaît. Par conséquent, modifiez pom.xml comme suit.
pom.xml
<!--Supprimer cette ligne-->
<arg>-make:transitive</arg>
Ensuite, la compilation est réussie, alors exécutez-la. Ensuite, j'obtiens l'erreur suivante:
$ 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] ------------------------------------------------------------------------
...
Apparemment, c'était de la mousse de construire le code de test. Par conséquent, modifiez pom.xml comme suit.
mvn scala: run inclut les opérations de compilation mvn. Donc, en réalité, il vous suffit d'exécuter mvn scala: run.
pom.xml
<dependencies>
...
<!-- JUnitRunner -->
<dependency>
<groupId>org.specs2</groupId>
<artifactId>specs2-junit_${scala.compat.version}</artifactId>
<!--la version est avant et après specs2-Match avec le noyau, etc.-->
<version>2.4.16</version>
<scope>test</scope>
</dependency>
<!----------------->
...
</dependencies>
Courir
$ 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
Puisqu'il n'y a pas de classe principale, spécifiez-la dans scala-maven-plugin. (Référence: http://qiita.com/motokazu/items/57540c80509d83c6a168)
pom.xml
<!-- scala-maven-Ajouter au plugin dans le 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>
<!--d'ici-->
<configuration>
<launchers>
<launcher>
<id>test</id>
<mainClass>project.test.App</mainClass>
<args>
<arg>${basedir}</arg>
</args>
</launcher>
</launchers>
</configuration>
<!--Ajouter ici-->
</plugin>
Lorsque mvn scala: run est exécuté, «Hello world!» Est sorti en toute sécurité. Ensuite, ajoutez la bibliothèque que vous souhaitez utiliser librement aux dépendances de pom.xml. Si xgboost,
pom.xml
<dependency>
<groupId>ml.dmlc</groupId>
<artifactId>xgboost4j</artifactId>
<version>0.7</version>
</dependency>
Ajoutez-le comme ça. (Pour utiliser réellement xgboost, vous devez installer mvn à l'avance selon la procédure officielle)
mvn scala: run compile et exécute l'application, mais il compile même sans autorisation. Si vous souhaitez simplement l'exécuter, vous devez d'abord générer un fichier jar contenant les bibliothèques dépendantes. pour cette raison Ajoutez maven-assembly-plugin à pom.xml.
pom.xml
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
Courir
$ 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>
fin.