2012-10-17 25 views
1

我試圖使用反射0.9.8庫,它來作爲一個超級罐子。如果我在我的項目的構建路徑中添加了JAR(「感言-0.9.8-uberjar」),那麼Eclipse將不會發現任何類類型的:反思,ClasspathHelper等。如何使用部署爲uberjar的庫?

如果我提取單「感言-0.9.8.jar」(尤伯杯一個),並將其添加到構建路徑,然後在編譯的時候一切正常,但是當我執行我的項目,我得到一個NoClassDefFoundError(我很確定它是由缺少依賴造成的)。

我也試着尤伯杯罐子中添加的每一個的.jar,但我還是會得到的NoClassDefFoundError。

我需要做些什麼來使用這個庫作爲uberjar發佈?

編輯: 在情況下,它可以幫助,這是我想打電話思考的方法(這是一個片段,我從Can you find all classes in a package using reflection?了):

private static Set<Class<?>> getAllClassesInPackage(String pckg){ 
    List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>(); 
    classLoadersList.add(ClasspathHelper.contextClassLoader()); 
    classLoadersList.add(ClasspathHelper.staticClassLoader()); 

    Reflections reflections = new Reflections(new ConfigurationBuilder() 
     .setScanners(new SubTypesScanner(false), new ResourcesScanner()) 
     .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0]))) 
     .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix(pckg)))); 

    return reflections.getSubTypesOf(Object.class); 

} 
+0

也許你會說什麼是沒有找到類,並檢查它是否可以在您手動連接罐子之一。 – dodecaplex

回答

0

我有同樣的問題和你一樣,消息NoClassDefFoundError。搜索我發現,其他的罐子一樣,反射-0.9.8.jar內部存在的那些內部有罐子產生這個問題一段時間。然而,當我像你那樣提取它時,我又看到了同樣的問題。我推斷,這可能是由於反射包的編譯版本(1.5版編譯),我的項目是1.6編譯。

我已經決定放棄使用反思包,併發布了臨時解決方案包中的檢索類:

Can you find all classes in a package using reflection?

我希望它能幫助。