Maven Run Project


231

Esiste una "fase" o "obiettivo" di Maven per eseguire semplicemente il metodo principale di una classe Java? Ho un progetto che vorrei testare manualmente semplicemente facendo qualcosa come "mvn run".

Risposte:


348

Vedi il plugin exec maven . È possibile eseguire le classi Java utilizzando:

mvn exec:java -Dexec.mainClass="com.example.Main" [-Dexec.args="argument1"] ...

L'invocazione può essere semplice come mvn exec:javase la configurazione del plugin fosse nel tuo pom.xml. Il sito dei plugin su Mojohaus ha un esempio più dettagliato .

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>com.example.Main</mainClass>
                    <arguments>
                        <argument>argument1</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

14
ecco come dovrebbe apparire una risposta! riferimento + esempio semplice + esempio complesso. il semplice esempio ha funzionato per me (non è più necessaria la configurazione)
codewing

1
c'è una versione più recente di questo plugin (più recente della 1.2.1?)
Alexander Mills,

Sì, c'è una versione più recente, quindi non copiare il frammento sopra 1-a-1 a meno che tu non voglia usare la versione 1.2.1 Vedi mojohaus.org/exec-maven-plugin/usage.html per l'ultima versione A partire da ora è 1.6.0
user1053510

Grazie, sapresti anche come eseguire una classe principale se in sottomodulo con dipendenze in altri moduli?
user1767316

Questo non gestisce in modo effettivo la classe principale
Dexter

23

1. Modifica POM.xml

Aggiungi la seguente proprietà in pom.xml. Assicurati di utilizzare il nome di classe completo (ovvero con il nome del pacchetto) che contiene il mainmetodo:

<properties>
        <exec.mainClass>fully-qualified-class-name</exec.mainClass>
</properties>

2. Esegui comando

Ora dal terminale, attiva il seguente comando:

mvn clean compile exec:java

NOTA È possibile passare ulteriori argomenti tramite -Dexec.args="xxx"flag.


Funziona davvero? L'ho provato come entrambi: <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> e <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass> e non funziona . L'errore è lo stesso: [ERRORE] Impossibile eseguire l'obiettivo org.codehaus.mojo: exec-maven-plugin: 1.6.0: java (default-cli) sul progetto newtrex: i parametri 'mainClass' per obiettivo org.codehaus.mojo : exec-maven-plugin: 1.6.0: java mancante o non valido -> [Help 1]
Nenad Bulatovic

Funziona, potresti voler controllare questo post
Saikat,

@NenadBulatovic: Funziona sostituendo $ {foo.bar.SomeMainClass} con foo.bar.SomeMainClass -> senza $ o {}
Krishna Santosh Sampath il

14

Le risposte sopra menzionate sono corrette, ma lo sto semplificando per nessuno come me. Vai al file pom del tuo progetto. Aggiungi una nuova proprietà exec.mainClasse specifica il suo valore come classe che contiene il tuo metodo principale. Per me era DriverClassdentro mainpkg. Modificalo secondo il tuo progetto. inserisci qui la descrizione dell'immagine

Fatto ciò, vai alla cartella che contiene il tuo progetto pom.xmled eseguilo sul prompt dei comandi mvn exec:java. Questo dovrebbe chiamare il metodo principale.


8

Non è necessario aggiungere un nuovo plug-in in pom.xml. Basta eseguire questo comando

mvn org.codehaus.mojo:exec-maven-plugin:1.5.0:java -Dexec.mainClass="com.example.Main" | grep -Ev '(^\[|Download\w+:)' 

Vedi il plugin maven exec per un maggiore utilizzo.


Passa ulteriori argomenti tramite-Dexec.args="...arg..."
sstn,


2

clean package exec:java -P Class_Containing_Main_Method Il comando è anche un'opzione se hai un solo metodo Main (PSVM) nel progetto, con il seguente Setup Maven.

Non dimenticare di menzionare la classe nella <properties></properties>sezione di pom.xml:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.main.class>com.test.service.MainTester</java.main.class>
</properties>

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
           <mainClass>${java.main.class}</mainClass>
        </configuration>
</plugin>

STS Run Configuration insieme a Maven Setup sopra:

inserisci qui la descrizione dell'immagine


Non mi sembra giusto. -P non è per 'profilo'? Se lo stai specificando sulla riga di comando, perché devi inserirlo nelle proprietà del plugin?
Rup,

@Rup Sì, -Pè per il profilo. Condiviso questo, in quanto è anche un'opzione per l'esecuzione del progetto Maven.
Abhijeet
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.