2012-11-10 52 views
0

這是我的目標:使用SableCC在運行時生成幾個分析器/詞法分析器,並加載它們的實例以進行分析和搜索。在以編程方式創建的.jar文件中加載一個類

所以我想我的步驟將是:

  1. 生成使用SableCC的.java文件。我想我已經做到了,很好。

  2. 編譯.java文件到.class文件。我用JavaCompiler做了這個。我認爲這也很好。

  3. 將生成的文件放在.jar文件中,保留文件結構。我使用this作爲模板。使用JarBrowser檢查.jar文件顯示包的文件結構已被保留。使用它,Jar Catalog看起來與常規文件.jar相同。但是,使用JarBrowser,我的jar不會顯示在「CLASSPATH目錄」下。這導致我相信我的.jar文件沒有被正確創建。

  4. .jar文件加載到URLClassLoader的實例中。我試圖用Class.forName()加載它,但它似乎沒有工作。

每當我做第4步,我得到一個java.lang.ClassNotFoundException。有沒有人有任何想法,爲什麼這是?

+0

可能的重複[我應該如何在運行時動態加載JARS?](http://stackoverflow.com/questions/60764/how-should-i-load-jars-dynamically-at-runtime) –

+0

@EugeneRetunsky:我已經去過這個問題。我使用幾乎相同的代碼,但它不起作用。因此,不同的問題:P –

+0

你試過這個:http://stackoverflow.com/questions/194698/how-to-load-a-jar-file-at-runtime? –

回答

1

事實證明,我有一個斜槓作爲文件/目錄名稱的前綴。我正在從文件名截斷父目錄,但沒有考慮父目錄的尾部斜槓,因此/dir1/file1正在完成而不是dir1/file1。我猜JAR文件很挑剔。

+0

請標記爲已接受。 – Vulcan

+0

「你明天可以接受你自己的答案 (點擊這個盒子解僱)」我會,對不起:/ –

+1

哦,我的壞,我沒有意識到有一個等待時間。只要一定要把它標記爲接受,當你可以:) – Vulcan