Cofoja:错误:合同错误:包com.google.java.contract不存在 [英] Cofoja : error: error in contract: package com.google.java.contract does not exist

查看:116
本文介绍了Cofoja:错误:合同错误:包com.google.java.contract不存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Google Cofoja(用于合同编程的Google库). 我已经复制/粘贴了构建文件,直到能够成功编译我的库.

I'm trying to use Cofoja, the Google library for contract programming. I've copied/pasted the build file wich I'm able to compile my library with succesfully.

但是当我开始添加一个注释以指定一个简单的合同规则时,我将无法再进行编译并获得以下控制台输出:

But when I start adding one annotation to specify a simple contract rule, I cannot compile anymore and get this console output :

build:
[javac] C:\Users\Admin\test\Seismi\build.xml:24: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 2 source files to C:\Users\Admin\test\Seismi\build\classes
[javac] C:\Users\Admin\test\Seismi\build.xml:31: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 9 source files to C:\Users\Admin\test\Seismi\build\contracts
[javac] error: error in contract: package com.google.java.contract does not exist
[javac] error: error in contract: package com.google.java.contract does not exist
[javac] error: error in contract: package com.google.java.contract does not exist
[javac] error: error in contract: package com.google.java.contract does not exist
[javac] error: error in contract: package com.google.java.contract does not exist
[javac] error: error in contract: package com.google.java.contract does not exist
[javac] error: error in contract: package com.google.java.contract.core.agent does not exist
[javac] error: error in contract: package com.google.java.contract.core.agent does not exist
[javac] error: error in contract: package com.google.java.contract.core.agent does not exist
[javac] C:\Users\Admin\test\Seismi\src\com\backpapp\requestmanager\IResult.java:7: error: error in contract: package com.google.java.contract does not exist
[javac]     @Ensures({"result != null","!result.isEmpty()"})
[javac]     ^
[javac]   clause: result != null
[javac]                         ^
[javac] 13 errors

这是IResult.java:

Here is the IResult.java :

import com.google.java.contract.Ensures;

public interface IResult {
    @Ensures({"result != null","!result.isEmpty()"})
    public String getId();
}

还有我的ant文件:

<project name="Seismi" default="dist" basedir=".">

  <!-- Project directories. -->
  <property name="src.dir" location="src"/>
  <property name="dist.dir" location="dist"/>
  <property name="lib.dir" location="libs"/>
  <property name="build.dir" location="build"/>
  <property name="classes.dir" location="${build.dir}/classes"/>
  <property name="contracts.dir" location="${build.dir}/contracts"/>


  <property name="cofoja" value="cofoja.asm.jar"/>

   <path id="class.path">
     <pathelement location="${lib.dir}/${cofoja}"/>   
     <pathelement location="${lib.dir}/json-simple-1.1.1.jar"/>
   </path>

  <target name="build">
    <mkdir dir="${build.dir}"/>

    <!-- Compiles WITHOUT contracts. -->
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}">
      <classpath refid="class.path"/>
      <compilerarg value="-proc:none"/>
    </javac>

    <!-- Compiles ONLY the contracts. -->
    <mkdir dir="${contracts.dir}"/>
    <javac srcdir="${src.dir}" destdir="${contracts.dir}">
      <classpath>
        <path refid="class.path"/>
        <!-- Add ${classes.dir} to the second compilation class path
             so that Cofoja finds your already compiled class files. -->
        <pathelement path="${classes.dir}"/>
      </classpath>
      <compilerarg value="-proc:only"/>
    </javac>
  </target>

  <target name="dist" depends="build">
    <mkdir dir="${dist.dir}"/>
    <jar destfile="${dist.dir}/${ant.project.name}.jar">
      <fileset dir="${classes.dir}"/>
      <fileset dir="${contracts.dir}"/>

    </jar>
  </target>


  <target name="clean">
    <delete dir="${build.dir}"/>
    <delete dir="${dist.dir}"/>
  </target>
</project>

任何线索都值得欢迎,我整天都在为此苦苦挣扎.

Any clue is more than welcome, I've been struggling all day on this.

推荐答案

在这一问题上花费了一天的大部分时间之后,以下是解决方案

After spending best part of a day on this issue, the following was the solution

仅将针对合同的类路径,源路径和类输出编译器args添加到您的编译器中(看起来像这样)

Add the classpath, sourcepath and classoutput compiler args to your compile only for contracts (will look like this)

<!-- Compiles ONLY the contracts. -->
<mkdir dir="${contracts.dir}"/>
<javac srcdir="${src.dir}" destdir="${contracts.dir}">
  <classpath>
    <path refid="class.path"/>
    <!-- Add ${classes.dir} to the second compilation class path
         so that Cofoja finds your already compiled class files. -->
    <pathelement path="${classes.dir}"/>
  </classpath>
  <compilerarg value="-Acom.google.java.contract.classpath=${classpathBuild}" />
  <compilerarg value="-Acom.google.java.contract.sourcepath=${src.dir}" />
  <compilerarg value="-Acom.google.java.contract.classoutput=${classes.dir}"/>
  <compilerarg value="-proc:only" />
</javac>

致谢

这篇关于Cofoja:错误:合同错误:包com.google.java.contract不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆