2016-12-14 15 views
0

ここにヌードルを追加します。私は、Gradleを使って依存関係をよりよく理解するために、そしてJavaでさまざまなファイルをインポートするために使用しようとしている非常に単純なプロジェクトを持っています。次の3つのファイルでGradle&Java:ファイルを依存関係として追加する

$ ls 
build.gradle dependencies src 

$ ls dependencies/ 
Hello.java Hello.jar 

$ ls src/ 
Temp.java 

build.gradle:

apply plugin: 'java' 

dependencies { 
     compile fileTree(dir: 'dependencies', include:'**/*.jar') 
} 

sourceSets { 
    main { 
     java { 
      srcDirs = ['src'] 
     } 
    } 
} 

task compile(type: JavaCompile) { 
    source = file('src') 
} 

Hello.java

public class Hello{ 
     int l = 1; 
     public Hello(){ 
       System.out.println(l); 
     } 

     public static void main(String[] args){ 
       Hello h = new Hello(); 
     } 
} 

Temp.java:私は、次のファイル構造を持っている

public class Temp { 

     public static void main(String[] args0){ 
     Hello h = new Hello(); 
     } 

} 

コマンドラインでgradle jarを実行している場合、Gradleのが正常にビルドようです...私のjarファイルを実行するためのGradleのドキュメントに基づいて

$ java -classpath build/libs/testproject.jar Temp 
Exception in thread "main" java.lang.NoClassDefFoundError: Hello 
     at Temp.main(Temp.java:5) 
Caused by: java.lang.ClassNotFoundException: Hello 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     ... 1 more 

をしようとしたときしかし、私が何を参照するように見えることはできません私は間違っている。私の依存関係の仕様はbuild.gradleで何が行われているのですか?また、なぜTemp.javaにHello.javaが表示されるのですか?これをどうやって解決するのですか?

ご協力いただきありがとうございます。

答えて

2

依存関係またはサブプロジェクトのjarファイルは、デフォルトでルートプロジェクトjarにパッケージ化されません。

ルートプロジェクトのjarファイルに追加する場合は、ルートプロジェクトのjarタスクを変更してクラスを追加できます。

jar { 
    //... 
    from 'dependencies/classes/Hello.class' 
    //... 
} 

するとこのとき./gradlew jar

、jarファイルを作成するために、再度jarタスクを実行して、あなたのプログラムが正常に実行する必要があります。

$ java -cp build/lib/testproject.jar Temp 

もっと簡単な解決策は、あなたのルートプロジェクト

apply plugin: 'application' 
mainClassName = 'Temp' 

applicationプラグインを適用し、./gradlew run

してプログラムを実行し、いくつかの記事は、このトピックをカバーしているがあり、

https://www.mkyong.com/gradle/gradle-create-a-jar-file-with-dependencies/

を見ます
2

あなたがgradle noobなら...私はあなたがGradleのの非常に賢明な慣習リソースのためのJavaソース

  • のsrc /メイン/リソースのための

    1. のsrc /メイン/ javaの(XMLなどがJAR /クラスパスに追加)
    2. のsrc /テスト/ javaのに従ってください示唆します
    3. のjarファイルがリポジトリから参照しなければならないテストリソースの
    4. のsrc /テスト/リソースのテストJavaソースのために、瓶は、プロジェクトの下にlibディレクトリに住むべきではない(とソースコントロールにcomittedすべきではありません)
  • 関連する問題