[JAVA] Jusqu'à ce que vous construisiez un projet écrit scala avec Maven et que vous l'exécutiez avec la commande scala.

Maven -scala run-

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.

  1. Créez un projet contenant du code scala
  2. Paramètres d'exécution du code scala dans maven
  3. Génération et exécution d'un fichier jar contenant des dépendances

L'environnement est ApacheMave:3.5.0 java:1.8.0 scala:2.11.6

Créer le projet

$ 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

Paramètres à exécuter

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.

Au fait, mvn compile et mvn scala: run compile et scala: run spécifient l'objectif d'exécution, donc

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)

Je veux juste le faire

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 = 

Ajout de l'URL du dépôt

<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.

Recommended Posts

Jusqu'à ce que vous construisiez un projet écrit scala avec Maven et que vous l'exécutiez avec la commande scala.
Jusqu'à ce que vous créiez un projet Spring Boot dans Intellij et que vous le transmettiez à Github
Exécutez JUnit et Spock dans un projet maven
Premiers pas avec Maven (jusqu'à ce que vous créiez un projet Java et combiniez des bibliothèques externes en un seul JAR exécutable)
21 Lire et exécuter le script à partir du fichier
Comment ajouter un autre projet en tant que bibliothèque Maven avec CircleCI et l'utiliser pour la construction
Avec [AWS] CodeStar, vous pouvez créer un projet Spring (Java) s'exécutant sur Lambda en seulement 3 minutes! !!
Représentez graphiquement les informations du capteur de Raspberry Pi en Java et vérifiez-les avec un navigateur Web
Générez un numéro de série avec TableGenerator of Hibernate (JPA) et stockez-le dans l'ID de String.
Jusqu'à ce que l'environnement docker soit créé et que le conteneur Ubuntu soit démarré et arrêté
[Gradle] Construisez un projet Java avec une configuration différente de la convention
Construire un projet Java avec Gradle
Comment télécharger et exécuter le package Jar directement à partir du référentiel Maven avec juste la ligne de commande
Que faire si l'opération non autorisée s'affiche lors de l'exécution d'une commande dans le terminal
Créez un projet de développement d'application Spring Boot avec la commande cURL + tar
[Java] Créez un fichier jar compressé et non compressé avec la commande jar
J'ai écrit une fonction Lambda en Java et l'ai déployée avec SAM
Jusqu'à ce que vous puissiez utiliser la base de données H2 en mode serveur avec Dropwizard en utilisant Eclipse et vous connecter avec DB Viewer.
Créez un fichier jar avec la commande
Premiers pas avec Gradle (jusqu'à ce que vous créiez un projet Java et combiniez des bibliothèques externes en un seul JAR exécutable)
Obtenez des informations vidéo YouTube avec Retrofit et conservez-les dans l'application Android.
Jusqu'à ce que vous exécutiez un programme Java avec le SDK AWS local sur Windows
Créez un environnement Apache et Tomcat avec Docker. À propos, coopération Maven & Java
Je voulais démarrer un serveur AP et déboguer avec juste la commande Maven
[Laravel] Mémorandum de commande jusqu'au démarrage du projet
Ajouter un projet dans n'importe quel dossier avec Gradle
Commande Docker pour créer un projet Rails avec un seul coup dans l'environnement sans Ruby
Que faire si vous ne pouvez pas exécuter avec la commande "nom du package Java / nom de la classe"