2013-04-05 37 views
5

我一直在爲我的公司創建一個帶有java的soap服務器,最近我轉而使用Bone-CP和Maven導入所有需要的第三方程序。當我完成實施骨CP我使用的服務器命令第一次使用maven之後的Java.lang.NoClassDefFoundError?

jar -cvfm SoapServer.jar manifest.txt SoapServer 

而且當我把它轉移到我的服務器,並試圖運行它,我得到這個錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: SoapServer/SoapServer (wrong name: com/test/SoapServer/SoapServer) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    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:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482) 

唯一想我能想到的造成這個問題的原因是maven沒有將所需的JAR與程序打包在一起?如果是這種情況,我只需要下載它們並將它們添加到類路徑中?

回答

13

如果你需要所有的依賴於可執行的JAR進行包裝,然後配置你的POM像

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
       <mainClass>com.something.YourMainClass</mainClass> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

以上塊將在lib中添加所有的庫/清單中類路徑條目類路徑

並複製所有依賴到lib目錄

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.1</version> 
     <executions> 
      <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/lib</outputDirectory> 
       <overWriteReleases>false</overWriteReleases> 
       <overWriteSnapshots>false</overWriteSnapshots> 
       <overWriteIfNewer>true</overWriteIfNewer> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
+0

是否有可能在maven-jar-plugin中添加另一個classpathPrefix條目?我想要一個名爲config的外部文件夾來爲我存儲一個屬性文件在這個文件中執行更改而不需要改變屬性文件將位於打包文件夾中的打包jar文件中。 – 2015-07-29 19:28:21

+0

我有這個要求,我最終本地修改插件之前,我應該拉請求,你需要添加到除了依賴關係以外的類路徑條目? – 2015-07-29 19:31:22

+0

例如, 裏面的jar我有: - config/bioagents.properties 對於用戶打開jar文件來改變屬性文件是不可行的。 正如我看到的,我們可以把一些依賴關係放在一個外部文件中,而不是打包在一個jar中,我想爲config/bioagents.properties做同樣的事情。 放入外部目錄(不打包在jar文件中)。因此,一個簡單的用戶可以輕鬆地更改我的程序的屬性。 – 2015-07-29 19:38:50

相關問題