Можно запустить файл JAR.Ошибка JNI после сборки maven.Classpath может быть сломан - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь запустить файл .jar, созданный с помощью maven.Когда я запускаю свой проект в InteliJ IDE, он работает нормально, но когда я строю его с помощью maven, я не могу его запустить.

Команда, используемая для запуска run:

java-cp target \ xmpp-server.jar com.wedevol.xmpp.server.EntryPoint

Вывод команды:

c:\Repos\remindanyoneserverapp>java -cp target\xmpp-server.jar com.wedevol.xmpp.server.EntryPoint
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/jivesoftware/smack/XMPPException
        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.jivesoftware.smack.XMPPException
        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

Вывод команды Maven "пакет mvn":

c:\Repos\remindanyoneserverapp>mvn package

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< com.wedevol.xmpp.server:xmppserver2 >-----------------
[INFO] Building FCM XMPP Server 0.0.4
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ xmppserver2 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory c:\Repos\remindanyoneserverapp\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ xmppserver2 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ xmppserver2 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory c:\Repos\remindanyoneserverapp\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ xmppserver2 ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ xmppserver2 ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ xmppserver2 ---
[INFO] Building jar: c:\Repos\remindanyoneserverapp\target\xmpp-server.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.312 s
[INFO] Finished at: 2018-08-26T21:32:37+02:00
[INFO] ------------------------------------------------------------------------

Файл POM.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.wedevol.xmpp.server</groupId>
	<artifactId>xmppserver2</artifactId>
	<version>0.0.4</version>
	<packaging>jar</packaging>
	<name>FCM XMPP Server</name>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<smack.version>4.2.3</smack.version>
		<json-simple.version>1.1.1</json-simple.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.igniterealtime.smack</groupId>
			<artifactId>smack-java7</artifactId>
			<version>${smack.version}</version>
		</dependency>
		<dependency>
			<groupId>org.igniterealtime.smack</groupId>
			<artifactId>smack-tcp</artifactId>
			<version>${smack.version}</version>
		</dependency>
		<dependency>
			<groupId>org.igniterealtime.smack</groupId>
			<artifactId>smack-extensions</artifactId>
			<version>${smack.version}</version>
		</dependency>
		<dependency>
			<groupId>com.googlecode.json-simple</groupId>
			<artifactId>json-simple</artifactId>
			<version>${json-simple.version}</version>
		</dependency>
		<dependency>
  			<groupId>com.google.firebase</groupId>
  			<artifactId>firebase-admin</artifactId>
  			<version>5.9.0</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.46</version>
		</dependency>
	</dependencies>

	<build>
		<finalName>xmpp-server</finalName>
		<plugins>
			<!-- Set a JDK compiler level -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.7.0</version>
				<configuration>
					<source>${java.version}</source>
					<target>${java.version}</target>
				</configuration>
			</plugin>

		</plugins>
	</build>
</project>

Полагаю, это проблема с classpath.Я попытался сгенерировать classpath с помощью IDE, но не могу его найти ... Пожалуйста, дайте какой-нибудь совет, как начать с classpath, если это так.Возможно, лучше настроить Maven для сборки всех зависимостей в jar.

1 Ответ

0 голосов
/ 28 августа 2018

pom.xml пришлось обновить следующим образом:

a
<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>fully.qualified.MainClass</mainClass>
      </manifest>
    </archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
</plugin>
...