2011-04-22 94 views
0

我有一個使用Spring 3.0(這是一堆瓶子,而不是一個罐子)的NetBeans Java控制檯項目。添加彈簧罐到類路徑

當我嘗試在命令行中執行它,我得到

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext 
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
Could not find the main class: com.aosprojects.transportservice.runner.InitialRunner. Program will exit. 

如何解決這一問題?

我一直在使用-cp指定像

java -cp libs/spring/* -jar dist/XXXXX.jar 

回答

1

如果您'使用maven構建你的應用程序,它運行在NetBeans IDE中,你需要在你的maven pom.xml中定義一個插件,以便在你的最終.jar文件中包含所有需要的.jar文件以使其可執行。

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
        <goal>shade</goal> 
       </goals> 
       <configuration> 
        <transformers> 
         <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
          <mainClass>yourmainpackagename.YourMainClass</mainClass> 
         </transformer> 
         <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
          <resource>META-INF/spring.handlers</resource> 
         </transformer> 
         <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
          <resource>META-INF/spring.schemas</resource> 
         </transformer> 
        </transformers> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

此方法使用maven shade插件。你也可以使用maven assembly插件,準備好面對令人討厭的bug:p

歡呼聲。

0

這告訴你做正確的方式,在它所有的罐子文件夾的嘗試:

http://javahowto.blogspot.com/2006/06/set-classpath-in-eclipse-and-netbeans.html

右擊項目,選擇屬性,並按照說明進行操作。添加您需要的所有JAR。

如果它是可執行JAR,則必須將所有依賴項正確添加到清單中。谷歌的指示如何做到這一點,並給它一個去。

+0

我已經這樣做了,但是當我導航到dist文件夾並嘗試運行jar時,它會顯示列出的異常 – 2011-04-23 01:01:46

+0

您嘗試運行JAR嗎?這是一個可執行的JAR? – duffymo 2011-04-23 12:40:17

0

如果您使用Netbeans IDE編譯(使用正確的構建路徑),那麼構建工件(jar)和lib/將位於dist目錄中。

CD到${project-root}/dist目錄,然後運行:

java -jar XXXXX.jar 

的依賴性在庫必須在MANIFEST通過的Netbeans已經照顧。

PS:請參閱dist目錄中生成的README。

0

這裏是我的目錄結構:

〜/下載/
| --libs
--- | --spring
------ | --org.springframework.expression -3.1.0.M1.jar
------ | --org.springframework.context-3.1.0.M1.jar
------ | - 剩下的罐子
| --Spring.java

爲Spring.java的源代碼:

import org.springframework.context.ApplicationContext; 
public class Spring{ public static void main(String... args){ ApplicationContext ac; System.out.println("Successfully declared reference of type ApplicationContext. Exiting...");}} 

導航到〜/下載/並執行以下命令:

javac -cp "libs/spring/*" Spring.java 
jar cvfe Spring.jar Spring Spring.class 
java -cp ".:libs/spring/*" -jar Spring.jar 

輸出:

Successfully declared reference of type ApplicationContext. Exiting...