java.lang.IncompleteClassChangeError:实现类

use*_*926 2 java

我试图实现一个调度程序来安排 3 个作业,但在第一个作业实现中,我只收到不兼容的类更改错误。

错误已上线,

JobDetail jobA = JobBuilder.newJob(JobA.class)
                     .withIdentity(jobKeyA).build();
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

完整的代码如下..

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class Scheduler1 {
    public static void main( String[] args ) throws Exception
    {

    JobKey jobKeyA = new JobKey("jobA", "group1");
        JobDetail jobA = JobBuilder.newJob(JobA.class)
        .withIdentity(jobKeyA).build();

        JobKey jobKeyB = new JobKey("jobB", "group1");
        JobDetail jobB = JobBuilder.newJob(JobB.class)
        .withIdentity(jobKeyB).build();

        JobKey jobKeyC = new JobKey("jobC", "group1");
        JobDetail jobC = JobBuilder.newJob(JobC.class)
        .withIdentity(jobKeyC).build();


        Trigger trigger1 = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName1", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();

        Trigger trigger2 = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName2", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();

        Trigger trigger3 = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName3", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();

        Scheduler scheduler = new StdSchedulerFactory().getScheduler();

        scheduler.start();
        scheduler.scheduleJob(jobA, trigger1);
        scheduler.scheduleJob(jobB, trigger2);
        scheduler.scheduleJob(jobC, trigger3);

    }
}
Run Code Online (Sandbox Code Playgroud)

我有三个类 jobA、jobB、jobC,但是当我将它们添加到上面的调度程序时,我收到如下错误,

线程“main”中的异常 java.lang.InknownClassChangeError: 在 java.lang.ClassLoader.defineClass1(Native Method) 处实现类 java.lang.ClassLoader.defineClass(ClassLoader.java:788) 处 java.security.SecureClassLoader.defineClass( SecureClassLoader.java:142) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:447) 在 java.net.URLClassLoader.access$100(URLClassLoader.java:71) 在 java.net.URLClassLoader$1.run(URLClassLoader.java :361)在java.net.URLClassLoader$1.run(URLClassLoader.java:355)在java.security.AccessController.doPrivileged(本机方法)在java.net.URLClassLoader.findClass(URLClassLoader.java:354)在java.lang .ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 Scheduler1.main(Scheduler1.爪哇:15)

Chr*_*rno 5

我也一直遇到这个问题。在深入研究了核心 Java 代码后,我们发现这个简单的应用程序每次都会产生问题:

public static void main(String[] args) {
    System.out.println(AssertionBuilderRegistry.class);
    System.out.println(AssertionBuilderRegistryImpl.class);
}
Run Code Online (Sandbox Code Playgroud)

通过在调试器中放置异常断点并遍历调用堆栈直到我们找到一些指定的嫌疑人,这些类被确定为违规者。

mvn dependency:tree
Run Code Online (Sandbox Code Playgroud)

产生这个片段:

\- org.apache.cxf:cxf-bundle-minimal:jar:2.4.10:compile
[INFO] |  |     +- org.apache.ws.xmlschema:xmlschema-core:jar:2.0.3:compile
[INFO] |  |     +- org.apache.geronimo.specs:geronimo-stax-api_1.0_spec:jar:1.0.1:compile
[INFO] |  |     +- org.apache.geronimo.specs:geronimo-annotation_1.0_spec:jar:1.1.1:compile
[INFO] |  |     +- javax.xml.bind:jaxb-api:jar:2.1:compile
[INFO] |  |     +- org.apache.neethi:neethi:jar:2.0.4:compile
Run Code Online (Sandbox Code Playgroud)

所以,基本上,

AssertionBuilderRegistryImpl
Run Code Online (Sandbox Code Playgroud)

必须实施/扩展

AssertionBuilderRegistry
Run Code Online (Sandbox Code Playgroud)

那么,我们来看看 CXF 版本的 AssertionBuilderRegistryImpl

public class AssertionBuilderRegistryImpl extends AssertionBuilderFactoryImpl implements
AssertionBuilderRegistry, BusExtension {
Run Code Online (Sandbox Code Playgroud)

现在 AssertionBuilderRegistry

public interface AssertionBuilderRegistry extends AssertionBuilderFactory { // intellij highlights red here on the extends 
Run Code Online (Sandbox Code Playgroud)

那么,让我们看看 AssertionBuilderFactory

public class AssertionBuilderFactory
Run Code Online (Sandbox Code Playgroud)

好吧,我们有一个类实现和接口,并且该接口扩展了一个类?!

但是等等,这是maven 指出的正确版本。那么,cxfminimal 取决于它不兼容的东西?!

让我们看一下 cxf-minimal 的 pom(片段):

<dependency>
  <groupId>org.apache.neethi</groupId>
  <artifactId>neethi</artifactId>
  <version>3.0.2</version>
  <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

好吧,WTF?!maven 依赖项说它需要 2.0.4(这显然不兼容),而这个工件的 pom 说它需要 3.0.2

所以,解决方案:

    <dependency>
        <groupId>org.apache.neethi</groupId>
        <artifactId>neethi</artifactId>
        <version>3.0.2</version>
        <scope>compile</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

在我们的主项目 POM 中显式声明依赖关系。

漏洞。在马文中。最新版本的maven(3.2.1)也是如此。