2017-07-19 33 views
0

我創建了一個Java應用程序來讀取Gmail地址。 當我從IDE(Intellij)執行腳本時,腳本完美運行。 但是通過生成jar文件,並試圖執行的jar:java -jar my-jar.jar java.lang.NoClassDefFoundError:javax/mail/Part

java -jar my-jar-file.jar 

我有這樣的錯誤:

java.lang.NoClassDefFoundError: javax/mail/Part 
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: javax.mail.Part 
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 
Exception in thread "main" 

這是我的POM文件:

<?xml version="1.0" encoding="UTF-8"?> 
<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>my.group.id</groupId> 
<artifactId>readMail</artifactId> 
<version>1.0-SNAPSHOT</version> 

<build> 
    <plugins> 
     <plugin> 
      <!-- Build an executable JAR --> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>my.MainClass</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<properties> 
    .... 
</properties> 
<dependencies> 
    .... 
    <!-- POP, SMTP, IMAP --> 
    <dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>mail</artifactId> 
     <version>1.4.7</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>mailapi</artifactId> 
     <version>1.4.3</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.activation</groupId> 
     <artifactId>activation</artifactId> 
     <version>1.1</version> 
    </dependency> 
    .... 
</dependencies> 

+0

如果您使用-jar並且未創建über-jar,則無法指定類路徑。你有一個帶有類路徑的清單文件嗎? –

+0

@DaveNewton我不知道什麼是清單文件。我想我沒有指定它。 – medKHELIFI

+0

你是這樣定義主類的。我的觀點是,你正在運行它,而不依賴於依賴。有一個Maven exec可以工作,或者你需要在jar中包含依賴關係。 –

回答

0

您必須創建一個包含所有依賴關係樹的Maven Shade Plugin的胖jar包。

+2

爲什麼投了票? –

+0

Somebody hater ... – atrujillofalcon

+0

是的,[Maven Shade Plugin](https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html)可以用來包含所有的依賴肥缸。 –