[RESOLVIDO] Maven - Invocar do Java

Boa noite pessoal,

Estou trabalhando em um projeto onde o maven tem de ser chamado para criar um novo projeto, mas de dentro do Java. Gostaria de perguntar para vocês se alguém tem idéia de como fazer isso. Até agora já testei os seguintes códigos sem sucesso:

public static void main(String[] args) throws IOException, InterruptedException {

    Process p = null;
    String comando = "C:/Program Files/Apache Software Foundation/apache-maven-3.0.4/bin/mvn.bat archetype:generate -DgroupId=br.com.serjava.projetomaven -DartifactId=projeto-maven  -DarchetypeArtifactId=maven-archetype-quickstart  -Dversion=1  interactive -e";
    
    try {
        p = Runtime.getRuntime().exec(comando);
        
    } catch (IOException e) {
        System.err.println("Error on exec() method");
        e.printStackTrace();
    }

    copy(p.getInputStream(), System.out);
    p.waitFor();

}

static void copy(InputStream in, OutputStream out) throws IOException {
    while (true) {
        int c = in.read();
        if (c == -1)
            break;
        out.write((char) c);
    }
}
	
}

O problema deste código é que não sei como criar uma pasta e posicionar o maven lá para criar o projeto e nem pular a confirmação das configurações. Tipo… Para nesta parte:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>>
[INFO] 
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<<
[INFO] 
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] Using property: groupId = br.com.serjava.projetomaven
[INFO] Using property: artifactId = projeto-maven
[INFO] Using property: version = 1
[INFO] Using property: package = br.com.serjava.projetomaven
Confirm properties configuration:
groupId: br.com.serjava.projetomaven
artifactId: projeto-maven
version: 1
package: br.com.serjava.projetomaven

Tentei criar um batzinho para fazer o java invocar, mas continuo com o mesmo problema da confirmação. Usando um .bat eu consigui criar uma pasta e posicionar o maven lá, mas não consigo pular a confirmação.

Agradeço a todos que puderem ajudar.

Inté…

Obs: Aceito qualquer idéia, pois depois a idéia é através do java ainda invocar o maven para o mesmo fazer a compilação do projeto

E qual seria a finalidade de invocar o Maven via Java pra compilar o projeto? Pergunto isso porque, se o que você quer é criar algo pra construir seus projetos, poderia deixar isso de lado e usar algo pronto como o Jenkins ou o TeamCity.

Boa tarde Ataxexe,

A idéia é realmente esta. O problema é que a gente já tem uma ferramenta que gerencia os projetos, o que falta para ela de verdade é gerenciar as dependências do projeto e criar um executável.
Agora, sobre a sua sugestão de usar o Jenkins, para o projeto que estou trabalhando não vai dar jogo, mas vou começar a utilizar para gerenciar os meus outros projetos.

Valeu a dica.

[quote=Jubarius]Boa tarde Ataxexe,

A idéia é realmente esta. O problema é que a gente já tem uma ferramenta que gerencia os projetos, o que falta para ela de verdade é gerenciar as dependências do projeto e criar um executável.
Agora, sobre a sua sugestão de usar o Jenkins, para o projeto que estou trabalhando não vai dar jogo, mas vou começar a utilizar para gerenciar os meus outros projetos.

Valeu a dica.[/quote]

Entendo…não queria dizer isso, mas, como alguém que já passou por situações parecidas, meus mais sinceros pêsames…

De qualquer forma, acho que isto pode te ajudar:

http://maven.apache.org/embedder.html

Blz Ataxexe,

Valeu pela força. Consegui resolver usando este código:

	public static void criaProjeto(String nomeProjeto){
		try {
				Process p = Runtime.getRuntime().exec(caminho_para_arquivo_bat_com_comando_para_o_maven);
				InputStream in = p.getInputStream();  
				int ch;  
				while ((ch = in.read()) != -1) {  
					System.out.print((char)ch);  
				}

		} catch (IOException e) {
			e.printStackTrace();
		} 
	}

Dessa forma transformei o (Ru)Windows em garoto de recados, a única coisa importante é que tem de ter a saída no console, senão não funciona.
Sobre aquele link que você me passou, realmente é interessante. Nas futuras atualizações utilizarei o CLI, para tirar esta gambi feia que fiz.

Vlw pela ajuda.

Inté…

Amigo,

De uma olhada em alguns material para desenvolver plugins para o Maven, assim você não ira necessitar criar nenhum script e podera utilizar todos os recursos do maven, que por sinal são muitos.
Você pode invocar plugins maven, assim como você executar um jar.

http://www.avajava.com/tutorials/lessons/how-do-i-create-a-hello-world-goal-for-a-maven-plugin.html

Boa tarde tectuba,

Valeu pela dica, já tô indo ver o site.

Inté…