web-dev-qa-db-ja.com

Gradleベースのプロジェクトからビルドされた実行可能なjarファイルを実行する

私はgradleベースのスタンドアロンプ​​ロジェクトを持っています。 Gradleビルドを実行すると、jarはbuild/libsの下に生成されます。コマンドラインからこの実行可能jarを実行するにはどうすればよいですか?私は試した : Java -cp build/libs/foo.jar full.package.classnameしかし、インポートされたクラスに対してnoClassFoundExceptionが発生します。依存するjarをクラスパスの一部として含めるにはどうすればよいですか?

21
coder

質問にはgradleタグが付いているので、gradleビルドからjarを実行したいと思います。また、gradleビルドにJavaプラグインを使用することも想定しています。

あなたのgradleに次の行を追加してください:

task runFinalJar(type: JavaExec) {
   classpath = files('build/libs/foo.jar')
   classpath += sourceSets.main.runtimeClasspath
   main = full.package.classname
}

これで、タスクをビルドプロセスに含めることができます。

build.dependsOn.add("runFinalJar")

または、コマンドラインから実行します。

gradle build runFinalJar

[〜#〜] update [〜#〜] Peterが提案したようにアプリケーションプラグインを使用する方がきれいです

16
Eugen Martynov

アプリケーションプラグイン を使用して、コード、その依存関係、起動スクリプトを含むアーカイブを作成するか、実行可能なファットJARを作成します。後者は素朴な方法で行うべきではありませんが、 gradle-one-jar (または同様の)プラグインを使用します。

7

Jarを実行する簡単なタスクを追加する

task runJar(type: JavaExec) {
    main = "-jar";
    args jar.archivePath
}
7
Sylvain

答えは実際の問題を超えていると思います。問題は、gradleがビルドするJARを実行する方法です。

質問者は、彼らが試したと述べていますJava -cp build/libs/foo.jar full.package.classname 無駄に。

正しい構文はJava -jar build/libs/foo.jar、またはJARがそこにある場合、明らかにJava -jar foo.jar通常どおり。

IMHO、わかりやすくするために質問を編集する必要があります。

4
Thufir

私は初心者なので、ここでの説明は単純化されます。俺の build.gradleファイルには1行しか含まれていません:apply plugin: 'Java'hello world Javaのコードsrc/main/Java/org/dx/test/App.Java。コマンドシェルから、次のように入力しました:gradle build。そして、このjarファイルが魔法のように作成されているのを見ました。

build/libs/helloworld.jar

上記の回答はすべて機能しませんでした。私のために働いたのは:

Java -cp build/libs/helloworld.jar org.dx.test.App

今、私はgradleが魔術でいっぱいであることを知っているので、私の状況があなたの状況を完全に反映していないかもしれないと確信しています。実行されたアクションは次のとおりです。

  1. その1行を作成しますbuild.gradleファイル
  2. App.Java医師の所定のフォルダの場所
  3. タイプgradle build
0
typelogic