sofastack / sofa-boot

SOFABoot is a framework that enhances Spring Boot and fully compatible with it, provides readiness check, class isolation, etc.
https://www.sofastack.tech/sofa-boot/docs/Home
Apache License 2.0
4.97k stars 1.27k forks source link

ClassNotFoundException: #208

Closed zhengwanzhang closed 6 years ago

zhengwanzhang commented 6 years ago

报错提示: Caused by: java.lang.NoClassDefFoundError: com/iwallet/biz/common/util/UniqID at com.alipay.common.event.impl.DefaultUniformEventBuilder.<init>(DefaultUniformEventBuilder.java:19) at com.hundsun.gold.mq.MqService.<init>(MqService.java:20) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) ... 30 common frames omitted Caused by: java.lang.ClassNotFoundException: com.iwallet.biz.common.util.UniqID at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 37 common frames omitted 错误模块com.alipay.system:alipay-system-event:3.1.17,类com.alipay.common.event.impl.DefaultUniformEventBuilder,是在运行官网上的关于消息队列的代码时抛出的异常,希望上面的信息对你们定位错误有帮助 引用的sofaboot版本是

<parent>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>sofaboot-enterprise-dependencies</artifactId>
    <version>2.3.4</version>
</parent>

消息队列测试代码是

import com.alipay.common.event.UniformEvent;
import com.alipay.common.event.UniformEventBuilder;
import com.alipay.common.event.UniformEventPublisher;
import com.alipay.common.event.impl.DefaultUniformEventBuilder;
import com.hundsun.gold.endpoint.model.Account;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;
import java.util.Random;
import java.util.UUID;

public class MqService {
    private static final Logger logger = LoggerFactory.getLogger(MqService.class);
    private final static String TOPIC = "TP_DEFAULT";
    private final static String EVENTCODE = "EC_DEFAULT";
    private UniformEventPublisher mqPublisher;
    private UniformEventBuilder uniformEventBuilder = new DefaultUniformEventBuilder();

    public boolean publish() {
        if (logger.isInfoEnabled()) {
            logger.info("Publish a message.");
        }
        /* Create a message instance. */
        final UniformEvent message = uniformEventBuilder.buildUniformEvent(TOPIC, EVENTCODE);
        /* Set the business object as an event payload. */
        message.setEventPayload(buildDefaultAccount());
        /* Mark that a runtime exception must be thrown when publishing failure. */
        message.setThrowExceptionOnFailed(true);
        boolean publishSuccess = false;
        try {
            /* Do publish action. */
            mqPublisher.publishUniformEvent(message);
            publishSuccess = true;
            logger.info("Public a message, success. TOPIC [{}] EVENTCODE [{}] id [{}] payload [{}]", new Object[]{
                    message.getTopic(), message.getEventCode(), message.getId(), message.getEventPayload()});
        } catch (Exception e) {
            logger.error("Public a message, failure. TOPIC [{}] EVENTCODE [{}] error [{}]",
                    new Object[]{message.getTopic(), message.getEventCode(), e.getMessage()}, e);
        }
        return publishSuccess;
    }

    private Account buildDefaultAccount() {
        Account account = new Account();
        account.setId(UUID.randomUUID().toString());
        account.setAmount(new Random().nextDouble());
        account.setGmtCreate(new Date());
        return account;
    }

    public void setMqPublisher(UniformEventPublisher mqPublisher) {
        this.mqPublisher = mqPublisher;
    }
}
QilongZhang commented 6 years ago

@zhengwanzhang 麻烦告知是官网那个用例? 是这个 https://www.cloud.alipay.com/docs/2/56528 吗?

zhengwanzhang commented 6 years ago

@QilongZhang 是快速开始的示例https://www.cloud.alipay.com/docs/2/56198

QilongZhang commented 6 years ago

@zhengwanzhang 添加这个

<groupId>com.alipay.common</groupId>
<artifactId>alipay-common-lang</artifactId>

你的是商业版,这个包没有开源