java - 缺少依赖项 'class javax.jdo.spi.PersistenceCapable$ObjectIdFieldSupplier' ,model.jar(model/error/Error.class) 需要

标签 java scala jdo

针对使用 JDO 增强的 Java 模型编译有效代码时出现编译错误。我对这些错误感到困惑,因为 Scala 没有直接使用相关的包私有(private)静态成员接口(interface)。我知道 Scala 不支持在 Scala 代码中使用此类接口(interface),但我很困惑 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 构建类路径之外。不过,您仍然需要未增强的代码才能进行编译。

这是我解决这个问题的方法:

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

  2. 我在 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。

关于java - 缺少依赖项 'class javax.jdo.spi.PersistenceCapable$ObjectIdFieldSupplier' ,model.jar(model/error/Error.class) 需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267231/

相关文章:

java - ArrayList.get(i) 给出的结果不可靠

scala - 在实践中使用 Scala Actor 编写应用程序 II

scala - Akka 流 : What is the difference between Unzip and Broadcast?

java - 设置不同于类名的实体种类名称

java - @scope - spring - 使用注释设置范围 "prototype",行为类似于单例。我哪里出错了?

Java - 查找字符串中给定单词之前和之后的单词

scala - 在 Scala 中重现 Java OpenGL ES 2.0 演示时出现奇怪的 NullPointerException

java - AppEngine 中的 JDO : keep the original entity when deleting from unowned relationship

java - JDO查询返回不符合过滤条件的实体

java - 在 iText 中合并两个模板