[英]How to use offline bytecode writer with Cofoja?
我正在嘗試使用Cofoja (Java合同)對代碼進行脫機檢測。 我似乎無法使用離線字節碼編寫器在已編譯的類文件中獲取合同(此功能在GitHub頁面的“ 調用”部分中已作簡要介紹)。 我執行生成的類文件,並故意使合同失敗。 什么都沒發生。
這是我的Java代碼...在我的主代碼中,我只是簡單地執行以下操作: return divide(10, 0);
@Requires("y != 0")
public static int divide(int x, int y)
{
return x / y;
}
然后,我執行以下操作:
我通過我的IDE Intellij構建.java文件,並獲取類文件。
然后執行離線字節碼編寫器,如下所示:
java -Dcom.google.java.contract.classoutput=cofoja -cp cofoja.asm-1.2-20140817.jar com.google.java.contract.core.agent.PreMain JavaTest.class
這導致在“ cofoja”目錄中生成另一個“ JavaTest.class”文件。 但是,當我執行它時,我看不到任何合同錯誤。
有誰知道使用“ com.google.java.contract.core.agent.PreMain”生成帶有已編入合同的類文件的正確步驟?
僅供以后參考,我查看了com.google.java.contract.core.agent.PreMain的源代碼。 事實證明,它希望合同文件和幫助文件與常規Java類文件位於同一位置。 一旦我將類文件和合同文件(位於同一目錄中)一起包括在內,便開始工作。
總結一下:
java -d {output_dir} -cp {your_classpath} "-Acom.google.java.contract.classoutput={output_dir}" "-Acom.google.java.contract.classpath={your_classpath}" "-Acom.google.java.contract.sourcepath={your_sources_dir}" -processor com.google.java.contract.core.apt.AnnotationProcessor
編譯Java類和cofoja合同文件。 確保類文件與cofoja合同文件位於同一目錄中。
然后執行以下命令:
java -Dcom.google.java.contract.classoutput={output_dir} -cp cofoja.asm-1.2-20140817.jar com.google.java.contract.core.agent.PreMain {all .class files separated by spaces}
此命令將生成帶有合同的單個.class文件,您可以在其中將其編譯為jar文件。 請注意,您需要擁有所有原始類文件的列表作為最后一個命令的參數,並確保合同文件和幫助文件位於相應的類文件旁邊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.