2013-12-22 9 views
20

Zur Zeit habe ich die folgende build.gradle Datei:Wie füge ich Quellen zu SourceSet mit Gradle hinzu?

apply plugin: 'java' 

repositories { 
    mavenCentral() 
} 

sourceSets { 
    main { 
     java { 
      srcDir 'src/model' 
     } 
     resources { 
      srcDir 'images/model' 
     } 
    } 

    test { 
     java { 
      srcDir 'tests/model' 
     } 
     resources { 
      srcDir 'images/model' // <=== NOT WORKING 
     } 
    } 
} 

dependencies { 
    compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar') 
    runtime fileTree(dir: 'libs', include: '*.jar') 

    testCompile group: 'junit', name: 'junit', version: '4.+' 
} 

Mein Repository wenn hier: https://github.com/quinnliu/WalnutiQ

und 4 aus meinen 49 Tests fehlschlagen, weil die Tests im Ordner "Tests/Modell" a benötigen Datei im Ordner "Bilder/Modell". Wie füge ich die Ressourcen richtig hinzu? Vielen Dank!

Antwort

31

Ich habe mir Ihre build.gradle genauer angeschaut und es scheint, dass die Pfade ein wenig aus sind.

Sie geben Quelle als src/model, noch Ihre Projektstruktur und Java-Quellcode legen nahe, dass model ist Ihr Paketnamen, die die Quelle Deklaration bedeutet sein sollte:

main { 
    java { 
     srcDir 'src' 
    } 
} 

Das Gleiche gilt für Tests:

test { 
    java { 
     srcDir 'tests' 
    } 
} 

Jetzt, mit fehlenden Ressourcen. In Ihrem Code verwenden Sie ImageIO.read(getClass().getResource(BMPFileName))
getClass().getResource() verwendet relativen Pfad zur Ressource. Um die Ressourcen zu halten auf der gleichen Ebene, sollten Sie Erklärung für die Ressourcen aktualisieren und entfernen model:

test { 
    java { 
     srcDir 'tests' 
    } 
    resources { 
     srcDir 'images' 
    } 
} 

Möglicherweise müssen auch

./gradlew clean 

bevor es funktioniert laufen.

Hier ist das Ergebnis mit dem aktualisierten build.gradle:

enter image description here

Hoffe, es hilft :)

13

Die in Ihrem Buildskript verwendete Syntax ist korrekt. Es ist mir nicht klar, warum Sie beiden Quellgruppen das gleiche Ressourcenverzeichnis hinzufügen und warum Sie behaupten, dass es in einem Fall nicht funktioniert.

srcDir "foo" fügt ein anderes Verzeichnis hinzu. Wenn Sie stattdessen das Standardverzeichnis ersetzen möchten, verwenden Sie stattdessen srcDirs = [ "foo" ]. Dies wird jedoch das vorliegende Problem nicht lösen.

Es wäre gut, den Code zu sehen, der die Ressourcen lädt, um Probleme damit auszuschließen.

+0

Ich kann es nicht kopieren und einfügen, aber wenn Sie meinen Repo klonen und gradle Build laufen Sie sehen es. –

Verwandte Themen