我無法讓maven構建一個可以在我的Ubuntu機器上運行的jar。看起來我的.jar
找不到.jar
,不管我做什麼。帶有混合Java 1.6和1.7名稱空間的Maven ClassNotFoundException
讓我感到困惑的是,在堆棧跟蹤中顯示了一個帶有斜槓命名空間的錯誤,就像在java 1.7中一樣,然後原因是使用了java 1.6命名空間,我不確定這是否可能是相關的解決問題。
爲什麼我在執行.jar
時得到ClassNotFound Exception
?
我的pom.xml擁有所有正確的配置,以依賴附加到.jar
並創建清單:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.rwanks.pepper</groupId>
<artifactId>wiki-indexer</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>wiki-indexer</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queries</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-benchmark</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<mainClass>com.rwanks.pepper.WikipediaIndexer</mainClass>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<mode>development</mode>
<url>${project.url}</url>
<key>value</key>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<!-- or whatever version you use -->
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>process-resources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<useRepositoryLayout>false</useRepositoryLayout>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
堆棧跟蹤:
java -jar target/wiki-indexer-1.0-SNAPSHOT.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/benchmark/byTask/feeds/NoMoreDataException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2625)
at java.lang.Class.getMethod0(Class.java:2866)
at java.lang.Class.getMethod(Class.java:1676)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.benchmark.byTask.feeds.NoMoreDataException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 6 more
生成MANIFEST.MF
:
Manifest-Version: 1.0
Built-By: hunter
Build-Jdk: 1.7.0_91
Class-Path: commons-logging-1.2.jar lucene-core-5.4.0.jar lucene-query
parser-5.4.0.jar lucene-sandbox-5.4.0.jar lucene-queries-5.4.0.jar lu
cene-analyzers-common-5.4.0.jar lucene-benchmark-5.4.0.jar lucene-cod
ecs-5.4.0.jar lucene-facet-5.4.0.jar lucene-highlighter-5.4.0.jar luc
ene-join-5.4.0.jar lucene-memory-5.4.0.jar lucene-spatial-5.4.0.jar i
cu4j-54.1.jar spatial4j-0.5.jar nekohtml-1.9.17.jar commons-compress-
1.8.1.jar xercesImpl-2.9.1.jar solr-solrj-5.4.0.jar commons-io-2.4.ja
r httpclient-4.4.1.jar httpcore-4.4.1.jar httpmime-4.4.1.jar zookeepe
r-3.4.6.jar stax2-api-3.1.4.jar woodstox-core-asl-4.4.1.jar noggit-0.
6.jar jcl-over-slf4j-1.7.7.jar slf4j-api-1.7.7.jar
Created-By: Apache Maven 3.0.5
Main-Class: com.rwanks.pepper.WikipediaIndexer
key: value
url: http://maven.apache.org
mode: development
Archiver-Version: Plexus Archiver
我可以補充一點,你可以考慮使用[行家遮陽簾插件(https://maven.apache.org/plugins/maven-shade-plugin/),而不是Maven的JAR-插件:) – javapapo
@javapapo如你所說。我爲陰影插件添加了一小段代碼。如果請求者不知道它。 – SubOptimal
@javapapo我後來發現樹蔭插件,但我不確定這是否是最佳的,我有點希望從我的本地.m2文件夾或更輕量級的東西中獲取依賴項,但即使我添加了該文件夾到我的班級路徑我沒有運氣 – perrohunter