У меня есть сервер отдыха, написанный на java и использующий gradle в качестве системы сборки.
В одном из моих классов я использую файл src / main / resources / myresource.config как показано ниже
public static void main(String[] args) {
String resourcePath = Myapplication.class.getClassLoader().getResource("myresource.config").toURI().getPath();
LOGGER.info(String.format("Loading data from config %s", resourcePath));
BufferedReader br = new BufferedReader(new FileReader(resourcePath));
}
Программа отлично работает при запуске класса непосредственно из командной строки или ide.
Я создаю банку для своего приложения, как показано ниже
jar {
manifest {
attributes 'Main-Class': 'com.example.Myapplication',
'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' ')
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
}
jar успешно собирается внутри build / libs, когда я пытаюсь запустить jar java -jar myapplication.jar Мне не удается найти ресурс myresource.config .
Я распаковал архив сборки и обнаружил, что файл myresource.config присутствует, но jar не запускается.
То, что я пробовал до сих пор
ClassLoader.getSystemClassLoader().getResource("myresource.config");
Thread.currentThread().getContextClassLoader().getResource("myresource.config")
Кто-нибудь может указать, что я делаю неправильно?
Stacktrace
INFO: Loading data from config null
Invalid resource: myresource.config
java.lang.NullPointerException
at java.io.FileInputStream.<init>(FileInputStream.java:130)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at java.io.FileReader.<init>(FileReader.java:58)
at com.example.Myapplication.<main>(Myapplication.java:26)