Projeto Maven Run

231

Existe uma "fase" ou "objetivo" do Maven para simplesmente executar o método principal de uma classe Java? Eu tenho um projeto que eu gostaria de testar manualmente, simplesmente fazendo algo como "mvn run".

Verhogen
fonte

Respostas:

348

Veja o plugin exec maven . Você pode executar classes Java usando:

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

A chamada pode ser tão simples como mvn exec:javase a configuração do plug-in estivesse no seu pom.xml. O site do plug-in no Mojohaus tem um exemplo mais detalhado .

<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>
Robert Munteanu
fonte
14
é assim que uma resposta deve ser! referência + exemplo simples + exemplo complexo. o exemplo simples fez o truque para mim (sem configuração necessária mais)
codewing
1
há uma versão mais recente deste plugin (mais recente do que 1.2.1?)
Alexander Mills
Sim, há uma versão mais recente, portanto, não copie o fragmento acima de 1 para 1, a menos que você queira usar a versão 1.2.1 Consulte mojohaus.org/exec-maven-plugin/usage.html para obter a versão mais recente é 1.6.0
user1053510 24/10
Obrigado, você também saberia como executar uma classe principal se estiver no submódulo com dependências em outros módulos?
user1767316
Isso não funciona na classe principal
Dexter
23

1. Edite POM.xml

Adicione a seguinte propriedade em pom.xml. Certifique-se de usar o nome completo da classe (ou seja, com o nome do pacote) que contém o mainmétodo:

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

2. Executar comando

Agora, no terminal, ative o seguinte comando:

mvn clean compile exec:java

NOTA Você pode passar outros argumentos via -Dexec.args="xxx"sinalizador.

Saikat
fonte
Isso realmente funciona? Eu tentei como ambos: <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> e <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass> e não funciona . O erro é o mesmo: [ERRO] Falha ao executar a meta org.codehaus.mojo: exec-maven-plugin: 1.6.0: java (default-cli) no projeto newtrex: Os parâmetros 'mainClass' para a meta org.codehaus.mojo : exec-maven-plugin: 1.6.0: java está ausente ou é inválido -> [Help 1]
Nenad Bulatovic
Funciona, você pode querer verificar esta publicação
Saikat
@NenadBulatovic: Funciona se você substituir $ {foo.bar.SomeMainClass} por foo.bar.SomeMainClass -> sem o $ ou {}
Krishna Santosh Sampath
14

As respostas acima mencionadas estão corretas, mas estou simplificando para noobs como eu. Vá para o arquivo pom do seu projeto. Adicione uma nova propriedade exec.mainClasse atribua seu valor à classe que contém seu método principal. Para mim foi DriverClassem mainpkg. Altere-o conforme o seu projeto. insira a descrição da imagem aqui

Feito isso, navegue até a pasta que contém o seu projeto pom.xmle execute-o no prompt de comando mvn exec:java. Isso deve chamar o método principal.

shshnk
fonte
8

Não há necessidade de adicionar novo plug-in no pom.xml. Basta executar este comando

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

Veja o plugin exec maven para mais uso.

arulraj.net
fonte
Passe argumentos adicionais via-Dexec.args="...arg..."
sstn
2

clean package exec:java -P Class_Containing_Main_Method O comando também é uma opção se você tiver apenas um método Principal (PSVM) no projeto, com a seguinte instalação do Maven.

Não esqueça de mencionar a turma na <properties></properties>seção 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>

Configuração de execução do STS junto com a instalação do Maven acima:

insira a descrição da imagem aqui

Abhijeet
fonte
Isso não parece certo para mim. Não é -P para 'perfil'? Se você está especificando na linha de comando, por que precisa colocá-lo nas propriedades do plug-in?
Rup
@Rup Sim, -Pé para o perfil. Compartilhou isso, pois também é uma opção de execução do projeto Maven.
Abhijeet