2017-03-23 27 views
0

我想使用Reflections從Maven構建期間創建的JAR文件中選擇所有具有特定Annotation的類,但我認爲我遇到了一個問題這些文件不在類路徑中,因爲JAR是在Maven構建期間創建的,然後我的代碼也是由Maven運行的,但我不確定這是否正確,或者如果問題是如何解決的話。Maven構建期間在外部JAR文件中使用Java反射

當測試我的代碼時,我直接在Eclipse中運行該文件,它似乎讀取JAR並找到類,但是在創建JAR之後在Maven構建過程中調用該文件時,我得到每個類的ClassNotFoundExceptions。 這是代碼塊中,我指定的JAR文件,並試圖用思考來尋找類的特定模塊:

webClasses = new URL("jar", "","file:" + "C:/ 
development/workspaces/trunk/target/created.jar/!/classes/myModule/"); 
    URLClassLoader cl = URLClassLoader.newInstance(new URL[] { webClasses }); 
    reflections = new Reflections(ClasspathHelper.forClassLoader(cl), new TypeAnnotationsScanner(), cl); 

希望我解釋說,好吧,它應該是可以調用思考一個JAR來自Maven構建的文件,併爲它實際工作?

編輯

之所以這樣做,這是我們需要一般提取使用反射關於確認某些信息類的一些信息,並使用該信息將被不同的系統中使用的JSON文件。我沒有對創建的JAR做任何事情,它只是用來嘗試和提取信息,因爲我們將需要使用JAR的每個版本創建此JSON文件。

+0

這對我來說毫無意義。你爲什麼認爲你必須選擇課程?用所有類構建JAR,讓類加載器在運行時帶入它所需的類。不需要你做任何特別的事情。 – duffymo

+0

@duffymo我沒有使用JAR我想通過反射從某些類中一般性地提取一些信息,並創建一個JSON文件,並使用該信息將被不同的系統使用。我會更新信息 – Anto

+0

對我來說毫無意義。祝你好運。 – duffymo

回答

0

原來,雖然Maven構建正在做我可以訪問包名,所以我並不需要在所有訪問該JAR文件,這樣我就可以使用以下行:

Reflections reflections = new Reflections("com.myPackage1.myPackage2"); 
相關問題