Вылетает ClassNotFoundException при попытке запустить jar, скомпилированный через maven
Компилирую проект следующим способом:
mvn clean package
mvn compile
После этого запускаю скомпилированный jar следующей командой:
java -jar target/Task1.jar -Dtype=receiveData -DstartDate=2018-01 -DendDate=2018-12 -Drow=1
и получаю следующую ошибку:
java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetMethodRecursive(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException
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)
... 7 more
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main"
Вот Main:
Options options = new Options();
CommandLine cmd = null;
Map<String, String> optionsMap = new HashMap<>();
Option propertyOption = Option.builder()
.longOpt("D")
.argName("property=value")
.hasArgs()
.valueSeparator()
.numberOfArgs(2)
.build();
options.addOption(propertyOption);
CommandLineParser parser = new DefaultParser();
try {
cmd = parser.parse(options, args);
} catch (ParseException e) {
logger.warn("Parsing cmd error.");
}
if (Objects.requireNonNull(cmd).hasOption("D")) {
Properties properties = cmd.getOptionProperties("D");
optionsMap.put("type", properties.getProperty("type"));
optionsMap.put("downloadData", properties.getProperty("downloadData"));
optionsMap.put("row", properties.getProperty("row"));
optionsMap.put("startDate", properties.getProperty("startDate"));
optionsMap.put("endDate", properties.getProperty("endDate"));
optionsMap.put("lng", properties.getProperty("lng"));
optionsMap.put("lat", properties.getProperty("lat"));
}
В файле pom.xml имеется следующая зависимость:
<!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.4</version>
</dependency>