Вывод MavenCli на консоль eclipse / maven - PullRequest
0 голосов
/ 25 октября 2019

У меня есть приложение elipse RCP, которое использует Maven Surefire для специальных тестов. Maven интегрируется с помощью m2e в приложение.

Пользователь создает свой проект в моем приложении и хочет протестировать части своего проекта.

Теперь можно запустить тестовую команду maven из моего кода, и она отлично работает, но выходные данные журнала выводятся не на консоль моего приложения, а на консоль моей IDE.

public class MyAction implements IObjectActionDelegate {

private IFolder selectedFolder;
private IPath path;

@Override
public void run(IAction action) {
    String flagValue = foo();
    String projectLocation = bar();

    PrintStream out = System.out; // <- here

    MavenCli cli = new MavenCli();
    cli.doMain(new String[] {"test", "-DmyFlag=" + flagValue}, 
            projectLocation, out, out);
}

Какя могу заставить mavenCli печатать на консоль моего приложения?

1 Ответ

0 голосов
/ 29 октября 2019

Хорошо, я нашел способ печати на консоль приложения из MavenCLI. В действии, которое запускается пользователем, я запускаю задание:

public class MyAction implements IObjectActionDelegate {

private IFolder selectedFolder;
private IPath path;

@Override
public void run(IAction action) {
    String flagValue = foo();
    String projectLocation = bar();

    MyJob runTestCaseJob = new MyJob(flagValue , projectLocation);
        runTestCaseJob.schedule();
}

А в классе заданий я запускаю MavenCLI:

public class MyJob extends Job {

private static final String TASK_NAME = "Starting the Maven Command";

private String myFlag;
private String projectLocation;

private final PrintStream out = getConsole();
private final MavenCli cli = new MavenCli();

public MyJob(String myFlag, String projectLocation) {
    super(TASK_NAME);
    this.myFlag = myFlag;
    this.projectLocation = projectLocation;
}

@Override
protected IStatus run(IProgressMonitor monitor) {
    cli.doMain(new String[] {"test", "-DmyFlag=" + myFlag}, 
            projectLocation, out, out);
    return Status.OK_STATUS;
}

private PrintStream getConsole() {
    MessageConsole console = findMessageConsole("Console");
    console.activate();
    return new PrintStream(console.newOutputStream());
}

private MessageConsole findMessageConsole(String title) {
    IConsole[] existingConsoles = ConsolePlugin.getDefault().getConsoleManager().getConsoles();
    for (IConsole existingConsole : existingConsoles) {
        if (existingConsole.getName().equals(title)) {
            return (MessageConsole) existingConsole;
        }
    }
    MessageConsole console = new MessageConsole(title, null);
    ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[] {console});
    return console;
}
...