21

Gradle のアプリケーション プラグインを使用して、スタンドアロンの Java アプリケーションのインストールを生成しています。クラスパスに配置する必要がある構成ファイルがありますが、sh/bat ファイルでクラスパスを正しく生成するように設定できないようです。この構成ファイルは、jar の外部に配置する必要があります。

conf ファイルはディレクトリに/src/dist/conf/あるため、実行installAppすると、このような conf ディレクトリの下にインストールされます$APP_HOME/conf

このディレクトリを次のようにクラスパスに追加しようとしました:

startScripts.classpath.add(files('$APP_HOME/conf'))

しかし、sh/bat ファイルのクラスパスを見ると、次のようなエントリが追加されます。

$APP_HOME/lib/conf

libこのエントリのセクションを削除するようにgradleに指示するにはどうすればよいですか?

4

5 に答える 5

4

これはあなたの質問に対する適切な回答ではありませんが、startScripts タスクがまだ必要な柔軟性を持っていない例をいくつか見つけました。

ファイルの内容を直接編集することで、これらのインスタンスのいくつかを回避しました... Gradle の優れたモデルを正確に利用するわけではなく、特にお勧めしませんが、少なくとも Gradle の柔軟性を示しています!

したがって、次のようにクラスパスに何かをハックできます。

tasks.startScripts {
  doLast {
    def scriptFile = file "${outputDir}/${applicationName}"
    scriptFile.text = scriptFile.text.replace('CLASSPATH=$APP_HOME/lib', 'CLASSPATH=$APP_HOME/conf/:$APP_HOME/lib')
  }
}

これを行うときは、開始スクリプトのプラットフォーム非依存性を壊すことに注意してください。

于 2012-05-31T06:12:22.990 に答える
4

ファイルをクラス パスに配置する最も簡単な方法は、ファイルを に配置することsrc/main/resourcesです。src/distJar/クラスパスではなく、ディストリビューション (つまり、zip ファイル) にファイルを追加するためのものです。

于 2012-05-09T15:26:39.663 に答える
3

以下のMartin Dowのレシピの変形を行いました:

起動スクリプトで「APP_HOME=」を「export APP_HOME=」に置き換えます。

次に、私のコードは System.env.get("APP_HOME") を実行してから、たとえば conf/ フォルダーに移動できます。

これは私のGradleハックです:

tasks.startScripts {
  doLast {
    def scriptFile = file "${outputDir}/${applicationName}"
    scriptFile.text = scriptFile.text.replaceAll('APP_HOME=',  'export APP_HOME=')
  }
}

アプリ内の Java コードの例:

String APP_HOME = System.env().get("APP_HOME");
Properties p = new Properties();
p.load(new FileInputStream(APP_HOME + "/conf/myapp.properties"))

お役に立てれば。

注: 「エクスポート」は Windows では機能しません!

于 2012-11-20T13:09:59.227 に答える
3

私がやろうとしていることは、それほど異常なことではないように思えますが、回避策として、distディレクトリをディレクトリに配置できるようにするディレクトリと、gradle が生成するクラスパスをsrc/dist/lib/conf指定できます。sh/bat ファイルが正しいこと。conflib

誰かがより良い答えを持っている場合は、別の答えを受け入れます。

于 2012-05-09T20:02:34.950 に答える