当前位置: 首页 > 知识库问答 >
问题:

运行使用java的应用程序。io。Gradle的控制台API

薛欣德
2023-03-14

假设我有一个Java(或Kotlin,其实并不重要)应用程序,它使用Java。io。控制台API或任何其他操作终端状态的API(例如:net.rubygrapefruit:native platform):

System.out.println(format("Console is %s.", System.console()));

final Terminals terminals = Native.get(Terminals.class);
final Output out = Stdout;
if (terminals.isTerminal(out)) {
    final TerminalOutput stdout = terminals.getTerminal(out);
    stdout.bold();
    System.out.println("bold text");
    stdout.foreground(Color.Magenta);
    System.out.println("Magenta");
    stdout.reset();

    final Prompter prompter = new Prompter(terminals);
    prompter.askYesNo("Prompt", true);
    prompter.enterText("Text", "default text");
    prompter.enterPassword("Password");
    prompter.select("Select", asList("foo", "bar", "baz"), 1);
} else {
    System.out.println(format("%s is not a terminal.", out));
}

当Maven Exec插件启动时,上述代码运行正常,但对于Gradle(因为Gradle试图使自己的输出看起来很漂亮,带有所有的铃铛、哨子和进度条),代码只打印:

$ gradle --console=plain run
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE

> Task :run
Console is null.
Stdout is not a terminal.

BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date

配置run任务,如下所述:

private val run: JavaExec by tasks
run.apply {
    standardInput = System.`in`
    standardOutput = System.out
    errorOutput = System.err
}

或者按照这里的建议将--no-daemon添加到Gradle的命令行参数并没有真正的帮助(System.in仍然是java.io.PipeInputStream的实例,而System.outSystem.errorg.gradle.internal.io.LinePerThreadBufferingOutputStream的实例)。

有没有可能让Gradle停止干扰终端,并允许正在运行的应用程序访问它?

共有1个答案

韦宏扬
2023-03-14

您可能错误地分配了它们,因为它们都应该是ByteArrayOutputStream。甚至可能不应该在Gradle中分配它们(默认值的分配是多余的)。如果不应该使用JavaExec,请使用Exec,然后执行java-jar文件名。

 类似资料:
  • 问题内容: 我正在用Java和gradle编写控制台应用程序。我正在使用插件,并在中正确配置了必填字段。 在我的主班里,我与有联系。这是问题所在:当我在项目目录中运行时,阅读器不会等待控制台输入。而是在第一次通话时返回。对于我在做什么,这种行为是不可取的。 解决办法是什么?是否有用于gradle的单独的控制台应用程序插件,或者我需要以某种方式调整插件以适合我的需要? 问题答案: 默认情况下,gra

  • 我有一台服务器(Ubuntu 14.04.4 LTS),并希望某个Java应用程序一直在其上运行。目前我使用

  • 我试图在中运行控制台应用程序,但出现错误。 异常“yii\base\UnknownPropertyException”,在F:\xampp\htdocs\mdc\vendor\yiisoft\yii2\base\Component中显示消息“设置未知属性:yii\console\Response::formatters”。菲律宾比索:209 Common\config\main本地。php Cro

  • 问题内容: 我已经开发了一个Java控制台应用程序,该应用程序在启动时打开控制台窗口并保持在前台,我想在后台启动该应用程序。 现在,我通过以下命令行启动该应用程序: 有没有办法实现这种行为?更改命令行参数就足够了,还是我需要对代码进行一些更改? 问题答案: 答案取决于操作系统。

  • 问题内容: 所有, 我已经用Java编写了基于命令行的PhoneBook应用程序。该应用程序基本上会询问用户的一些详细信息,例如姓名,年龄,地址和电话号码,并将它们存储在文件中。其他操作包括按名称,电话号码等查找电话簿。所有详细信息都通过控制台输入。 我正在尝试为我已实现的每个功能编写JUnit测试用例,但无法弄清楚如何将实现代码重定向到我的JUnit测试方法中的某个东西,当我的实际代码停止供用户

  • 问题内容: 我一直在尝试从Java应用程序中检索“ unicode用户输入”,以获得一个小的实用程序片段。问题是,它似乎在“开箱即用”的Ubuntu上运行,我猜它在UTF-8上具有操作系统范围的编码,但是从“ cmd”运行时在Windows上不起作用。考虑的代码如下: 在Ubuntu上的输出(不对配置进行任何更改): 在Windows CMD提示符下输出(绝不受JAVA_TOOL_OPTIONS影