Ресурсы интерпретируются по их корням пути к классам. Что в вашем случае, когда вы запускаете свою программу так:
java -cp etc/application.properties:./lib/properties-loader-0.0.1-SNAPSHOT.jar
корни
./etc/application.properties
./lib/properties-loader-0.0.1-SNAPSHOT.jar
Ни один из этих файлов не содержит ваш файл application.properties (как подресурс). Если вы изменили свою команду следующим образом:
java -cp etc:./lib/properties-loader-0.0.1-SNAPSHOT.jar
Тогда вы можете прочитать ваш файл свойств в вашей программе как:
Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties");
В качестве дополнительного примечания всегда лучше использовать полные пути в настройках пути к классам.
* РЕДАКТИРОВАТЬ *
Это рабочий пример, который должен иллюстрировать загрузку ресурса:
mkdir props; cd props
mkdir etc; touch etc/application.properties
mkdir test; vi test/PropLoader.java
Вставьте этот контент в редактор и сохраните:
package test;
import java.io.InputStream;
public class PropLoader {
public static void main(String[] args) {
try {
final String path;
if(args.length == 1) path = args[0].trim();
else path = "etc/application.properties";
final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
if(is == null) throw new RuntimeException("Failed to load " + path + " as a resource");
else System.out.printf("Loaded resource from path: %s\n", path);
} catch(Exception e) {
e.printStackTrace();
}
}
}
И для проверки:
javac test/PropLoader.java
java -cp . test.PropLoader
Вывод Loaded resource from path: etc/application.properties
.