java - 使类的对象出现在其他项目Spring中时发生ClassNotFoundException

标签 java spring gradle noclassdeffounderror classnotfound

我试图使某个类的对象出现在其他项目中。

项目A包含TestBean
导入java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

public class TestBean implements Serializable{

    private static final long serialVersionUID = 1L;
    private String name;
    private Integer age;

    @JsonCreator
    public TestBean(@JsonProperty("name") String name, @JsonProperty("age") Integer age) {
        this.name = name;
        this.age = age;
    }

    public TestBean() {
        // TODO Auto-generated constructor stub
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

}

我正在尝试在项目B中访问它。

项目B的build.gradle
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'war'

repositories{
    jcenter{
        url "http://jcenter.bintray.com/"
    }
}

dependencies {    

    compile project(':projectA')
    runtime ':projectA' 
}

项目B的settings.gradle
include(':projectA')
project(':projectA').projectDir = new File('/Users/kegupta/Framework/projectA/')

rootProject.name = 'projectA'

当我尝试通过rest api在ProjectB的某些方法中访问TestBean时,观察到以下错误。
    SEVERE: Servlet.service() for servlet [App1] in context with path [/customContext] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: com/example/beans/TestBean] with root cause
java.lang.ClassNotFoundException: com.example.beans.TestBean
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
    at com.example.rest.TestControllerLead.readBookmarks(TestControllerLead.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1533)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1489)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

任何熟悉该错误的人。任何帮助将不胜感激。

最佳答案

在ProjectB的类路径中添加.class文件解决了我的问题。

sourceSets {
       main {
        output.resourcesDir = '{Path to projectB}/res'
        output.classesDir   = '{Path to projectB}//bin'
       }
 }

关于java - 使类的对象出现在其他项目Spring中时发生ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44468915/

相关文章:

java - 服务器启动时出现 spring Autowiring 错误

spring - 无论如何,是否可以扩展 JPA 存储库并使用定义的抽象类扩展另一个接口(interface)?

spring - 如何延迟 spring beans 启动?

java - Spring MVC - 下拉对象选择 - 无主标识符

android - Gradle无法解析文件

android - 无法下载 backport-util-concurrent.jar(backport-util-concurrent :backport-util-concurrent:3. 1):没有可用于离线模式的缓存版本

java - Android XML Reader 读取一次

java - 我的类需要是不可变的,但我需要一个复制构造函数,并且由于我的字段未初始化,构造函数给我一个错误

java - 在 Java 中拆分字符串

gradle - Android Studio构建因 “java not found”而失败