gpt4 book ai didi

java - MavenCli 输出到 eclipse/maven 控制台

转载 作者:行者123 更新时间:2023-12-01 22:29:30 27 4
gpt4 key购买 nike

我有一个 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 打印到我的应用程序控制台?

最佳答案

好的,我找到了一种从 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();
}

在 Job 类中,我启动 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;
}

关于java - MavenCli 输出到 eclipse/maven 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58554936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com