0

私はそのようなタスクを持つカスタムgradleプラグインを持っています:

@TaskAction
def buildSemanticVersion() {
    int major = project.semanticVersion.major
    int minor = project.semanticVersion.minor
    int patch = "git rev-list HEAD --count".execute().text.toInteger()

    project.setVersion("${major}.${minor}.${patch}")
}

私はそれのための統合テストを持っています:

@Test
public void testBuildSemanticVersion() throws Exception {
    // GIVEN
    Project project = ProjectBuilder.builder().withProjectDir(new File("build/tmp/git-repository")).build()
    project.apply plugin: 'com.github.moleksyuk.vcs-semantic-version'
    project.semanticVersion.with { major = 1; minor = 2 }

    // WHEN
    project.tasks.buildSemanticVersion.execute()

    // THEN
    assertThat(project.version, Matchers.equalTo('1.2.3'))
}

しかし、タスクのコマンド"git rev-list HEAD --count".execute().text.toInteger()がプロジェクト ディレクトリに対して実行されますが、テスト ディレクトリ"build/tmp/git-repository"に対して実行されないため、失敗します。

テスト プロジェクト ディレクトリに対してこのタスクを実行できますか?

アップデート:

@Mark Vieira と @Rene Groeschke に感謝します。彼らの提案によると、私はそのように修正しました:

@TaskAction
def buildSemanticVersion() {
    int major = project.semanticVersion.major
    int minor = project.semanticVersion.minor

    def stdout = new ByteArrayOutputStream()
    def execResult = project.exec({
        commandLine 'git'
        args 'rev-list', 'HEAD', '--count'
        standardOutput = stdout;
    })

    int patch = stdout.toString().toInteger()

    project.setVersion("${major}.${minor}.${patch}")
}
4

1 に答える 1

0

groovys"...".execute()は常に Java プロセスの現在の作業ディレクトリを使用しますが、私の知る限り、それは構成可能ではありません。

この失敗したテストは、作業ディレクトリが必ずしもプロジェクト ディレクトリではないため、タスクの実装に問題があることを示しています。タスクを使用するか、メソッドを独自のタスクにExecラップすることができます。project.execproject.exec と Exec の両方で、作業ディレクトリを構成できます。

于 2015-01-07T22:34:49.173 に答える