Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
缺少依赖项';类javax.jdo.spi.PersistenceCapable$ObjectedFieldSupplier';,model.jar所需(model/error/error.class)_Java_Scala_Jdo - Fatal编程技术网

缺少依赖项';类javax.jdo.spi.PersistenceCapable$ObjectedFieldSupplier';,model.jar所需(model/error/error.class)

缺少依赖项';类javax.jdo.spi.PersistenceCapable$ObjectedFieldSupplier';,model.jar所需(model/error/error.class),java,scala,jdo,Java,Scala,Jdo,在针对JDO增强的Java模型编译有效代码时,我会遇到编译错误。我对这些错误感到困惑,因为没有直接使用Scala中讨论的包私有静态成员接口。我知道Scala不支持从Scala代码中使用这样的接口,但我对Scala编译器抱怨这些接口感到困惑 以下是我得到的错误: [scalac] Compiling 3 scala and 196 java source files to /home/alain/Documents/Project/build/model/src [scalac] error: e

在针对JDO增强的Java模型编译有效代码时,我会遇到编译错误。我对这些错误感到困惑,因为没有直接使用Scala中讨论的包私有静态成员接口。我知道Scala不支持从Scala代码中使用这样的接口,但我对Scala编译器抱怨这些接口感到困惑

以下是我得到的错误:

[scalac] Compiling 3 scala and 196 java source files to /home/alain/Documents/Project/build/model/src
[scalac] error: error while loading Error, Missing dependency 'class javax.jdo.spi.PersistenceCapable$ObjectIdFieldSupplier', required by /home/alain/Documents/Project/model/dist/model.jar(model/error/Error.class)
[scalac] error: error while loading Binder, Missing dependency 'class javax.jdo.spi.PersistenceCapable$ObjectIdFieldSupplier', required by /home/alain/Documents/Project/model/dist/model.jar(model/attachment/Binder.class)
[scalac] error: error while loading Journal, Missing dependency 'class javax.jdo.spi.PersistenceCapable$ObjectIdFieldSupplier', required by /home/alain/Documents/Project/model/dist/model.jar(model/note/Journal.class)
[scalac] error: error while loading Exemption, Missing dependency 'class javax.jdo.spi.PersistenceCapable$ObjectIdFieldSupplier', required by /home/alain/Documents/Project/model/dist/model.jar(model/exemption/Exemption.class)
[scalac] error: error while loading Flag, Missing dependency 'class javax.jdo.spi.PersistenceCapable$ObjectIdFieldSupplier', required by /home/alain/Documents/Project/model/dist/model.jar(model/flag/Flag.class)
[scalac] error: error while loading ConfigurationGroup, Missing dependency 'class javax.jdo.spi.PersistenceCapable$ObjectIdFieldSupplier', required by /home/alain/Documents/Project/model/dist/model.jar(model/configuration/ConfigurationGroup.class)
[scalac] error: error while loading IssueConfiguration, Missing dependency 'class javax.jdo.spi.PersistenceCapable$ObjectIdFieldSupplier', required by /home/alain/Documents/Project/model/dist/model.jar(model/analysis/configuration/IssueConfiguration.class)
[scalac] 7 errors found
以下是我用来编译的Ant代码段:

<target name="compile" depends="jar">
    <depend srcdir="src" destdir="${src.classes.dir}" cache="${build.dir}/src_dependencies" />
    <scalac srcdir="src" destdir="${src.classes.dir}" classpathref="src.build.classpath">
        <include name="**/*.scala"/>
        <include name="**/*.java"/>
    </scalac>
    <javac srcdir="src" destdir="${src.classes.dir}" source="1.6" target="1.6" nowarn="on"
       debug="on" encoding="UTF-8" classpathref="src.build.classpath" />
</target>

带有增强类的model.jar位于src.build.classpath上

我不明白为什么scalac关心Java类的依赖关系,如果它们不影响编译Scala源代码的知识,它就无法解决这些依赖关系


有趣的是,IntelliJ的Scala插件能够编译并运行此代码。

将增强的代码保留在scalac构建类路径之外。不过,为了编译,您仍然需要未增强的代码

下面是我如何解决这个问题的:

  • 将常规JAR名称改为model-api.JAR(继承的目标使用src.classes.dir)

  • 我在
    src.build.classpath
    中使用model-api.jar而不是model.jar构建依赖项

  • 以下是增强目标的摘要:

    <property name="production.enhanced.dir" value="${production.classes.dir}/../enhanced" />
    <copy todir="${production.enhanced.dir}">
        <fileset dir="${production.classes.dir}" />
    </copy>
    <jdodoclet ...>
    <jdoc ...>
    <jar destfile="dist/model.jar"> <fileset dir="${production.enhanced.dir}" />
        <fileset dir="src" excludes="**/*.java */.jj */.scala */.groovy" />
    </jar>
    
    
    
    我必须制作的值得注意的版本是将未增强的类复制到沙盒目录,在沙盒目录上运行JDO增强,并生成一个具有原始名称的运行时JAR