用 DJ Java Decompiler 救回找不到原始碼的程式
把 class 變成 java code 可以用反組譯工具
在專案中的每個 log4j.xml 中的此行 DOCTYPE log4j:configuration SYSTEM “log4j.dtd” 位置出現警告
警告內容如下:
1 | The file cannot be validated as the XML Schema "C:\EclipseWorkspace\SomeProject\src\log4j.dtd (系統找不到指定的檔案。)" that is specified as describing the syntax of the file cannot be located. |
試過將 log4j.dtd 複製到同一目錄下,但 Eclipse 還是顯示同樣問題。
將該行改成
1 2 3 | <!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/resources/org/apache/log4j/xml/log4j.dtd?view=co"> |
就可以了。
不過這算是惡搞的處理方法,沒有網路就掛了,有機會還是要搞清楚是否有更適當的解決方案。
當我在 Eclipse IDE 環境中學習 struts 2 的過程中,進行編輯 struts.xml 時碰到提示下列的問題
The content of element type “package” must match “(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-exception-mappings?,action*)”.
有問題的 struts.xml 內容大略如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" namespace="/" extends="jasperreports-default"> <action name="myJasperTest" class="tw.idv.bestlong.test.action.JasperAction"> <result name="success" type="jasper"> <param name="location">/jasper/our_compiled_template.jasper</param> <param name="datasource">myList</param> <param name="format">PDF</param> </result> </action> <result-types> <result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"/> </result-types> </package> </struts> |
這是因為沒有依據 DTD 中定義的 Element 順序,所以只要調整內容的順序如下就可以通過檢查了。
1 2 3 4 5 6 7 8 9 10 11 12 13 | <package name="default" namespace="/" extends="jasperreports-default"> <result-types> <result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"/> </result-types> <action name="myJasperTest" class="tw.idv.bestlong.test.action.JasperAction"> <result name="success" type="jasper"> <param name="location">/jasper/our_compiled_template.jasper</param> <param name="datasource">myList</param> <param name="format">PDF</param> </result> </action> </package> |
ExtractFileDir() 與 ExtractFilePath() 是有差異的,直接用程式來看差異結果
1 2 3 4 5 6 7 8 | procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Clear; Memo1.Lines.Add(ExtractFileDir('C:\a.exe')); Memo1.Lines.Add(ExtractFilePath('C:\a.exe')); Memo1.Lines.Add(ExtractFileDir('C:\Program Files\a.exe')); Memo1.Lines.Add(ExtractFilePath('C:\Program Files\a.exe')); end; |
得到的執行結果是
C:\
C:\
C:\Program Files
C:\Program Files\
得知 ExtractFilePath() 的結果都會在路徑後保留 \
不同的 Java 專案可能會因為歷史悠久而需要用到不同版本的 JDK 來編譯。
在 Eclipse 的環境下,進入 Window > Preferences > Java > Installed JREs
然後點選 Add 選擇 Standard VM 指定 JRE home 到 JDK 安裝的位置,讓 Eclipse 知道其他 JDK 的存在。