wake-up-neo.com

Führen Sie die Hauptklasse des Maven-Projekts aus

Ich habe eine einfache Konsolenanwendung Java) erstellt, die mit Maven erstellt wurde. Gibt es eine Möglichkeit, die Hauptklasse (für die keine Argumente erforderlich sind) über die Befehlszeile auszuführen? Ein Maven-Befehl wie:

mvn run-app com.example.MainClass
246
Dónal

Probieren Sie das maven-exec-plugin . Von dort:

mvn exec:Java -Dexec.mainClass="com.example.Main"

Dadurch wird Ihre Klasse in der JVM ausgeführt. Sie können -Dexec.args="arg0 arg1" Verwenden, um Argumente zu übergeben.

Wenn Sie unter Windows arbeiten, wenden Sie Anführungszeichen für exec.mainClass Und exec.args An:

mvn exec:Java -D"exec.mainClass"="com.example.Main"

Wenn Sie dies regelmäßig tun, können Sie die Parameter auch in die Datei pom.xml einfügen:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>Java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>com.example.Main</mainClass>
    <arguments>
      <argument>foo</argument>
      <argument>bar</argument>
    </arguments>
  </configuration>
</plugin>
518
Matthew Farwell

Obwohl Maven Exec hier den Trick macht, fand ich es für einen echten Test ziemlich schlecht. Während ich auf maven Shell wartete und hoffte, dass dies anderen helfen könnte, kam ich schließlich zu diesem Repo mvnexec

Klonen Sie es und verknüpfen Sie das Skript irgendwo in Ihrem Pfad. Ich verwende ~/bin/mvnexec, Da ich ~/bin In meinem Pfad habe. Ich denke, mvnexec ist ein guter Name für das Skript, aber es liegt an Ihnen, den Symlink zu ändern ...

Starten Sie es aus dem Stammverzeichnis Ihres Projekts, in dem Sie die Verzeichnisse src und target sehen können.

Das Skript sucht nach Klassen mit der Hauptmethode und bietet eine Auswahlmöglichkeit (Beispiel mit mavenized JMeld project)

$ mvnexec 
 1) org.jmeld.ui.JMeldComponent
 2) org.jmeld.ui.text.FileDocument
 3) org.jmeld.JMeld
 4) org.jmeld.util.UIDefaultsPrint
 5) org.jmeld.util.PrintProperties
 6) org.jmeld.util.file.DirectoryDiff
 7) org.jmeld.util.file.VersionControlDiff
 8) org.jmeld.vc.svn.InfoCmd
 9) org.jmeld.vc.svn.DiffCmd
10) org.jmeld.vc.svn.BlameCmd
11) org.jmeld.vc.svn.LogCmd
12) org.jmeld.vc.svn.CatCmd
13) org.jmeld.vc.svn.StatusCmd
14) org.jmeld.vc.git.StatusCmd
15) org.jmeld.vc.hg.StatusCmd
16) org.jmeld.vc.bzr.StatusCmd
17) org.jmeld.Main
18) org.Apache.commons.jrcs.tools.JDiff
#? 

Wenn eine ausgewählt ist (Nummer eingeben), werden Sie zur Eingabe von Argumenten aufgefordert (Sie können dies mit mvnexec -P Vermeiden).

Standardmäßig kompiliert es das Projekt bei jedem Durchlauf. Sie können dies jedoch vermeiden, indem Sie mvnexec -B verwenden.

Es kann nur in Testklassen -M Oder --no-main Oder nur in Hauptklassen -T Oder --no-test Gesucht werden. hat auch eine Filter-by-Name-Option -f <whatever>

Hoffe das könnte dir etwas Zeit sparen, für mich schon.

15
albfan