2015-09-30 25 views
1

我正在嘗試使用Cofoja(Java合同)執行我的代碼的離線檢測。我似乎無法使用脫機字節碼編寫器在編譯的類文件中獲得合約(該功能在GitHub頁面的Invocation部分中簡要提及)。我執行結果的類文件並故意失敗。什麼都沒發生。如何在Cofoja上使用脫機字節碼編寫器?

這是我的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 

這導致另一個「JavaTest.class」文件中的「cofoja」目錄下生成。但是,當我執行它時,我看不到任何合同錯誤。

有誰知道使用「com.google.java.contract.core.agent.PreMain」生成合同編織的合同的正確步驟嗎?

回答

1

僅供將來參考,我參考了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} 

這個命令會產生內置合同,然後可以編譯成一個jar文件,單一的.class文件。請注意,您需要將所有原始類文件列表作爲最後一個命令的參數,並確保合同文件和幫助程序文件位於相應的類文件旁邊。

相關問題