java.lang.NoClassDefFoundError: Lorg/openspaces/core/GigaSpace

Я пытаюсь использовать Gigaspaces с Spring! У меня есть два проекта затмения. Весенний отдых, который занимает пространство Gigaspaces (другой проект Eclipse). У меня есть мастер-проект затмения, где у меня есть оба проекта.

Моя проблема в том, что я хочу развернуть мою службу отдыха на моем Tomcat v7.0, она дает сбой и показывает мне:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.payulatam.prototype.services.IClientService com.payulatam.prototype.controllers.ClientController.clientService; nested exception is java.lang.NoClassDefFoundError: Lorg/openspaces/core/GigaSpace;
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1122)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:983)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1660)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

Кажется, что кот не может найти банки Gigaspace. Но я включаю их в свой pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.payulatam.prototype</groupId>
<artifactId>rest-service</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>rest-service</name>
<url>http://maven.apache.org</url>

<parent>
    <groupId>com.payulatam.prototype</groupId>
    <artifactId>PayUBank</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<properties>
    <gsVersion>9.6.2-9900-RELEASE</gsVersion>
    <spring.version>3.2.2.RELEASE</spring.version>
    <jackson.version>1.9.10</jackson.version>
    <jdk.version>1.6</jdk.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.gigaspaces</groupId>
        <artifactId>gs-openspaces</artifactId>
        <version>${gsVersion}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.payulatam.prototype</groupId>
        <artifactId>common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!-- Spring 3 dependencies -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- Jackson JSON Mapper -->
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
</dependencies>

<build>
    <finalName>rest-service</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <downloadSources>true</downloadSources>
                <downloadJavadocs>false</downloadJavadocs>
                <wtpversion>2.0</wtpversion>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>${jdk.version}</source>
                <target>${jdk.version}</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Есть идеи как это исправить?

2 ответа

Решение

Вы указали, что com.gigaspaces будет предоставляться службой сервера или исполнителя, которую вы используете при установке <scope>provided</scope> в объявлении зависимостей для com.gigaspaces, которые отсутствуют в пути к классам в соответствии с указанием трассировки стека.

Наиболее вероятным случаем здесь является то, что он не предоставляется сервером, поэтому попробуйте удалить / изменить строку <scope>provided</scope> в <scope>compile</scope> в вашей помете для объявления зависимостей для библиотеки Gigaspaces; Таким образом, Maven будет тем, кто обеспечивает это.

Помощь от: Разница между compile а также provided объем

Измените этот раздел в вашем pom.xml

 <dependency>
        <groupId>com.gigaspaces</groupId>
        <artifactId>gs-openspaces</artifactId>
        <version>${gsVersion}</version>
        <scope>provided</scope>
    </dependency>

к

 <dependency>
        <groupId>com.gigaspaces</groupId>
        <artifactId>gs-openspaces</artifactId>
        <version>${gsVersion}</version>
        <scope>compile</scope>
    </dependency>

Просто для вашего собственного понимания, прежде чем вносить изменения, проверьте в своем развернутом файле war, есть ли у вас файл gs-openspaces.xxx.jar. Вы не увидите это там. Теперь внесите изменения, перестройте и повторно разверните и снова проверьте, что на этот раз вы должны увидеть файл jar.

Maven Dependency Scope объяснил

Также смотрите ссылки, предоставленные DirkyJerky в его ответе.

Другие вопросы по тегам