0

OS: Windows 10、主に Cygwin を使用。

DummyMain.groovy ファイルを次のようにまとめました。

@Grab(group='org.jline', module='jline', version='3.7.0')
class DummyMain {

static void main( args ) {
    new DummyMain().go()
}

def go() {
    def terminal = org.jline.terminal.TerminalBuilder.builder().jna( true ).system( true ).build()
    terminal.enterRawMode()
    def reader = terminal.reader()
    int readInt = -1
    while( readInt != 13 ) {
        readInt = reader.read()
        println "read |$readInt| class ${readInt.class.simpleName}"
        println "reader class ${reader.class.simpleName}"
    }
    reader.close()
    terminal.close()
}

}

groovy DummyMain独自のディレクトリに移動してこれを実行すると、これは期待どおりに機能し、喜びでいっぱいになります。reader.read()行は次の文字のために一時停止し、それを処理します (つまり、ユーザーが Enter キーを押して行を終了する前に)。

しかし、コメントアウトして@Grabこの行を入れるとbuild.gradle

compile 'org.jline:jline:3.7.0'

build.gradleそして、失敗する可能性のある最も単純な方法を使用してこのファイルを実行しようとします。whileループは、ユーザーの入力を待たずに無限にスピンします。つまり、「read |-1|...」を無限に出力します。

この待機の失敗は、Cygwin コンソールまたは Windows CMD コンソールを使用して移動すると発生しますgradle run

他の印刷行から、ここでのリーダーはNonBlockingInputStreamReader3 つのケースすべて (つまり、Cygwin 経由の Gradle、Windoze CMD またはgroovyコマンド ライン コマンド経由の Gradle) でクラスであることがわかります。

ただしgradle installDist、 を実行すると、結果として得られる「配布された」バージョンのアプリが正常に動作することがわかりそれを神に感謝します!しかし、テストと開発の目的で、Gradle で実行しようとする問題の解決策が見つかればうれしいです。この結果、一部のテストが失敗してはならないときに失敗する可能性があります。

tkruse に返信

これがbuild.gradleです。DummyMain.groovy は src\main\groovy\core の下にあります。

apply plugin: 'java-library'
apply plugin: 'groovy'
apply plugin: 'application'

mainClassName = "core.DummyMain"

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    api 'org.apache.commons:commons-math3:3.6.1'
    implementation 'com.google.guava:guava:21.0'
    compile 'org.codehaus.groovy:groovy-all:2.6.0-alpha-2'
    compile 'net.bytebuddy:byte-buddy:1.6.11'
    compile 'org.jline:jline:3.7.0'
}

(これまでのところ) 唯一の回答者は、JLine の作成者です。Gradle が JLine を使用する可能性は非常に低いと思います。

4

1 に答える 1