Ich habe ein Projekt, dessen vollständige Quelle Sie auf der GitHub-Seite here auf dem Zweig feat/config
finden können. Das Problem, das ich habe ist, dass ClassName.class.getClassLoader().getResourceAsStream()
immer null
zurückgibt, und das Erstellen eines File
mit dem vollständigen Pfad (einschließlich des Quellverzeichnisses) gibt auch eine FileNotFoundException
zurück.Travis CI und JUnit mit Gradle können keine Klassenpfadressourcen finden
Dieser Code sollte die Standardkonfigurationswerte aus einer Klassenpfadressource laden und in eine File
schreiben. Es funktioniert lokal, scheitert jedoch an Travis CI.
public static void writeDefault(String res, File out) throws IOException {
if (!out.exists()) {
out.getParentFile().mkdirs();
out.createNewFile();
}
OutputStream stream = new FileOutputStream(out);
InputStream in = FileConfig.class.getClassLoader().getResourceAsStream(res);
if (in == null) {
stream.close();
throw new FileNotFoundException(res);
}
IOUtils.copy(in, stream);
stream.close();
}
@Test
public void testFileConfig() throws IOException {
System.out.println("Creating default config file");
File testConfigFile = new File("configs/test.txt");
if (!testConfigFile.exists())
FileConfig.writeDefault("configs/test.txt", testConfigFile);
System.out.println("Loading config file");
Config testConfig = FileConfig.loadConfig(testConfigFile);
System.out.println("Loaded value: " + testConfig.getValue("value-1"));
System.out.println("Deleting config file");
testConfigFile.deleteOnExit();
}
Der obige Test schlägt mit dem folgenden Stack-Trace:
jtrial.config.TestConfig > testFileConfig STANDARD_OUT
Creating default config file
jtrial.config.TestConfig > testFileConfig FAILED
java.io.FileNotFoundException: configs/test.txt
at jtrial.config.FileConfig.writeDefault(FileConfig.java:111)
at jtrial.config.TestConfig.testFileConfig(TestConfig.java:24)
.travis.yml
Konfigurationsdatei:
language: java
jdk:
- oraclejdk8
notifications:
email: false
install:
- chmod +x ./gradlew
- ./gradlew --info assemble
script: ./gradlew --info check
Ich machte einen dummen Fehler, siehe meine Antwort –