web-dev-qa-db-ja.com

Gradleのアプリケーションプラグインの「実行」タスクのクラスパスに追加のフォルダーを指定するにはどうすればよいですか?

Gradleビルドスクリプトを構成して、ルートに追加の「config」フォルダーを含むアプリケーションのZipディストリビューションを作成しました。このフォルダーには(少なくとも現時点では)アプリケーションで使用されているプロパティファイルが1つだけ含まれ、アプリケーションのクラスパス上にあります。

しかし、私が今探しているのは、アプリケーションプラグインの「実行」タスクで同じことを行う方法です。 (テストのために)この方法でアプリケーションを実行しようとすると、クラスパスのルートにあるこのプロパティファイルにクラスがアクセスしようとしているため、プログラムの実行に失敗します。

ボーナスは、他のフォルダー(src/main/Java、src/main/resourcesなど)と同じように、IntelliJまたはEclipseでこのフォルダーもクラスパスに追加できるようにして、コードを実行してデバッグできるようにすることです。 IDE内で、gradleタスクを呼び出さないようにします。このコードを任意の1つのIDEに関連付けないようにしたいので、誰かがプロジェクトで作業する必要があるとき、彼らは単にbuild.gradleファイルをインポートし、IDEに必要な適切な構成ファイルを作成させる。

これが私のbuild.gradleファイルです:

apply plugin: 'application'

mainClassName = "MainClass"

startScripts {
    // Add config folder to classpath. Using workaround at
    // https://discuss.gradle.org/t/classpath-in-application-plugin-is-building-always-relative-to-app-home-lib-directory/2012
    classpath += files('src/dist/config')
    doLast {
        def windowsScriptFile = file getWindowsScript()
        def unixScriptFile = file getUnixScript()
        windowsScriptFile.text = windowsScriptFile.text.replace('%APP_HOME%\\lib\\config', '%APP_HOME%\\config')
        unixScriptFile.text = unixScriptFile.text.replace('$APP_HOME/lib/config', '$APP_HOME/config')
    }
}

repositories {
    ...
}

dependencies {
    ...
}

発生する可能性が高いのは、/ src/dist/configフォルダーをビルドディレクトリにコピーしてクラスパスに追加するか、その内容を既にクラスパスにあるフォルダーにコピーする必要があることです。

12
Mirrana

私はオパールの提案をヒントにしてしまい、次の解決策を思いつきました。私はbuild.gradleファイルに以下を追加しました:

task processConfig(type: Copy) {
    from('src/main/config') {
        include '**/*'
    }

    into 'build/config/main'
}

classes {
    classes.dependsOn processConfig
}

run {
    classpath += files('build/config/main')
}

または、より単純なアプローチとして、ランタイム依存関係をプロジェクトに追加することもできます。

dependencies {
    ...
    runtime files('src/main/config')
}

しかし、私の配布パッケージのlibフォルダーに.propertiesファイルが含まれることになったので、私はこの方法でそれを行うことになりませんでした。

18
agent154

docs で確認できるように、runJavaExecタイプのタスクです。したがって、classpathを変更できます。 configフォルダーをクラスパスに追加してみてください。 こちら を参照してください。

3
Opal