2016-12-14 4 views
0

여기에 Gradle Noob이 있습니다. 내가 종속성을 더 잘 이해하고 Gradle을 사용하여 Java에서 다른 파일을 가져 오는 방법을 배우려는 아주 간단한 프로젝트가 있습니다. 다음과 같은 세 개의 파일로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을 실행하는 경우 6,

은, 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 

, 내가 무엇을 볼 수없는 것 ... 내 항아리를 실행하려고 할 때 Gradle을하지만, 성공적으로 빌드 것으로 보인다 나는 잘못하고있다. build.gradle에서 내 종속성 사양은 무엇이며, 왜 Temp.java가 Hello.java를 볼 수 있도록 허용하지 않는 것입니까? 이 문제를 어떻게 해결할 수 있습니까?

도움을 미리 감사드립니다.

답변

2

종속성 또는 하위 프로젝트의 jar는 기본적으로 루트 프로젝트 jar에 패키지되지 않습니다.

루트 프로젝트의 jar 파일에 추가하려는 경우 루트 프로젝트의 jar 작업을 수정하고 클래스를 추가 할 수 있습니다.

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

그런 다음이 때, 병을 만드는 데 다시 ./gradlew 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

만약 당신이 gradob noob ...나는 당신이 Gradle을의 매우 합리적인 규칙 자원에 대한 자바 소스

  • SRC/메인/자원에 대한

    1. SRC/메인/자바 (XML 등이 항아리/클래스 패스에 추가)
    2. SRC/테스트/자바에 따라 제안 테스트 자바 소스에 대한 테스트 리소스에 대한
    3. SRC/테스트/자원
    4. 항아리는 저장소에서 참조해야한다 항아리는
    5. 를 프로젝트 아래에 lib 디렉토리에 살고있는 안 (소스 제어에 comitted해서는 안)
  • 관련 문제