Come si esegue un programma utilizzando Maven?


120

Vorrei che un obiettivo Maven attivasse l'esecuzione di una classe java. Sto cercando di migrare su a Makefilecon le linee:

neotest:
    mvn exec:java -Dexec.mainClass="org.dhappy.test.NeoTraverse"

E vorrei mvn neotestprodurre quello che make neotestfa attualmente.

Nemmeno il documentazione del plugin exec né le pagine delle attività di Maven Ant avevano alcun tipo di esempio semplice.

Attualmente sono a:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.1</version>
  <executions><execution>
    <goals><goal>java</goal></goals>
  </execution></executions>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

Tuttavia, non so come attivare il plug-in dalla riga di comando.

Risposte:


149

Con la configurazione globale che hai definito per il plugin exec-maven:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4.0</version>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

invocando mvn exec:javasulla riga di comando verrà richiamato il plug-in che è configurato per eseguire la classe org.dhappy.test.NeoTraverse.

Quindi, per attivare il plugin dalla riga di comando, esegui:

mvn exec:java

Ora, se desideri eseguire l' exec:javaobiettivo come parte della build standard, dovrai associare l'obiettivo a una fase particolare del ciclo di vita predefinito . Per fare ciò, dichiara il phasea cui vuoi legare l'obiettivo executionnell'elemento:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4</version>
  <executions>
    <execution>
      <id>my-execution</id>
      <phase>package</phase>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

Con questo esempio, la tua classe verrebbe eseguita durante la packagefase. Questo è solo un esempio, adattalo alle tue esigenze. Funziona anche con la versione del plugin 1.1.


1
All'inizio ero confuso: exec:javapuò essere usato anche per codice Scala e Clojure, non deve essere codice Java di per sé.
rightfold

8
La versione dovrebbe essere 1.4.0
Walery Strauch

Ha funzionato per me! Grazie!
mrddr

25

Per eseguire più programmi, avevo anche bisogno di un file profiles sezione:

<profiles>
  <profile>
    <id>traverse</id>
    <activation>
      <property>
        <name>traverse</name>
      </property>
    </activation>
    <build>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <configuration>
            <executable>java</executable>
            <arguments>
              <argument>-classpath</argument>
              <argument>org.dhappy.test.NeoTraverse</argument>
            </arguments>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

Questo è quindi eseguibile come:

mvn exec:exec -Dtraverse

1
Cosa sta succedendo con quella <argument>-classpath</argument><classpath />frase? Non credo sia corretto.
GreenGiant

1
Sì, molto probabilmente il <classpath />tag è arrivato per errore e dovrebbe essere rimosso. Quindi quella riga sembrerà solo:<argument>-classpath</argument>
Dimitry K

7
Non è un errore. Ciò indica che le dipendenze specificate in pom.xml devono essere utilizzate come parte del percorso di classe.
user924272
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.