簡體   English   中英

如何在Cofoja中使用離線字節碼編寫器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM