2012-03-23 18 views
202

Stworzyłem prostą konsolową aplikację Java, która jest zbudowana z Maven. Czy istnieje sposób, że główne klasy (który nie wymaga żadnych argumentów) mogą być uruchamiane z linii poleceń za pomocą polecenia maven jak:uruchom główną klasę projektu Maven

mvn run-app com.example.MainClass 

Odpowiedz

403

Spróbuj maven-exec-plugin. Z tego miejsca:

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

Spowoduje to uruchomienie klasy w JVM. Możesz użyć -Dexec.args="arg0 arg1", aby przekazać argumenty.

Jeśli używasz systemu Windows, stosuje cytaty dla exec.mainClass i exec.args:

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

Jeśli robisz to regularnie, można dodać parametry do pom.xml także:

<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> 
+0

To też jest dobre. Nie wiedziałem, że to istnieje. –

+0

działa jak amulet –

+12

to nie jest wygodne, aby prowadzić główną klasę w ten sposób :( – hugemeow

12

Mimo że maven exec robi tu sztuczkę, okazało się, że jest bardzo słabo na prawdziwy test. Czekając na maven shell, i nadzieję, że to mogłoby pomóc innym, ale w końcu wyszło na to repo mvnexec

Clone go i podlinkowujemy się script gdzieś w drodze. Używam ~/bin/mvnexec, ponieważ mam ~/bin na mojej ścieżce. Myślę mvnexec to dobra nazwa dla skryptu, ale to do ciebie, aby zmienić dowiązania ...

uruchomić go z katalogu głównego projektu, gdzie można zobaczyć src docelowych i katalogi.

Wyszukiwanie skrypt do zajęć metodą głównej, oferując wybierz, aby wybrać jeden (Przykład z mavenized JMeld projektu)

$ 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 
#? 

Jeśli ktoś wybiera się (ilość wpisywania), jesteś szybka argumentów (można unik z mvnexec -P)

Domyślnie kompiluje projekt w każdym przebiegu. ale można uniknąć stosując mvnexec -B

Pozwala szukać tylko w klasach testowych -M lub --no-main, lub tylko w głównych klas -T lub --no-test. ma również filtr według nazwy opcji -f <whatever>

Mam nadzieję, że to może zaoszczędzić trochę czasu, dla mnie to robi.

+1

Pamiętaj, że to nie zadziała po wyjęciu z pudełka w systemie Windows, który nie ma potrzebnych programów. –

+0

To prawda. W przypadku okien zawsze możesz użyć cygwin, aby uzyskać powłokę * nix, z grep, sed, cut ... – albfan

+0

Zaoszczędzono dużo czasu, thnx –

Powiązane problemy