1

スタンドアロン アプリケーションを CloudFoundry にデプロイしようとしています。ApplicationContext-method で Springを使用して Springmainを初期化しています。RabbitMQ でメッセージングを処理する単純な Bean があります。

で、 RabbitMQ を構成し、pom ファイルで、およびspring.xmlに必要な依存関係を追加しました。さらにプラグインを使用して、すべてのライブラリを含む単一の jar ファイルを作成し、-tool を使用してそれを cloudfoundry にデプロイします。cglib-nodepspring-rabbitcloudfoundry-runtimemaven-assembly-pluginvmc

jar-file を CloudFoundry にデプロイすると、次のエラーが発生します。

Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace
[http://www.springframework.org/schema/context]

Offending resource: class path resource [spring.xml]

[stacktrace ommited]

これが私のものspring.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    xmlns:cloud="http://schema.cloudfoundry.org/spring"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/rabbit
        http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd
        http://schema.cloudfoundry.org/spring
        http://schema.cloudfoundry.org/spring/cloudfoundry-spring-0.7.xsd">

    <context:component-scan base-package="mypackage" />

    <!-- Obtain a connection to the RabbitMQ via cloudfoundry-runtime: -->
    <cloud:rabbit-connection-factory id="connectionFactory"/>

    <!-- Set up the AmqpTemplate/RabbitTemplate: -->
    <rabbit:template connection-factory="connectionFactory"/>

    <!-- Request that queues, exchanges and bindings be automatically
         declared on the broker: -->
    <rabbit:admin connection-factory="connectionFactory"/>

    <!-- Declare the "messages" queue: -->
    <rabbit:queue name="messages" durable="true"/>
</beans>

そして、maven-assembly-plugin の構成:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>at.ac.tuwien.infosys.dse2013s.group17.allocator.ui.StartUpAllocator</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
          <id>make-assembly</id> <!-- this is used for inheritance merges -->
          <phase>package</phase> <!-- bind to the packaging phase -->
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
    </executions>
</plugin>

上記のエラーの原因は何ですか? maven-assembly-plugin の構成方法に何か問題がありますか、それとも spring.xml に本当に問題がありますか?

アップデート

spring-context 依存関係を管理対象依存関係としてルート pom に追加し、バージョン要素なしでモジュールから参照することで、エラーを解決できました。今は同じエラーが発生していますが、今回は例外がhttp://schema.cloudfoundry.org/springスキーマについて不平を言っています。

4

1 に答える 1

1

[更新] cf-maven-pluginを確認することをお勧めします。これにより、CloudFoundry へのデプロイがはるかに簡単になり、vmc ツールを直接操作する必要がなくなりました。GitHub ページでは、このプラグインを使用して通常のアプリケーションとスタンドアロンアプリケーションをデプロイする方法と、スタンドアロン アプリケーションに appassemblyr-maven-plugin を使用する方法について説明しています。このブログ投稿も、開始するのに役立ちます。 [/アップデート]

アプリケーションを間違った方法で CloudFoundry にデプロイしていたことが判明しました。私はmaven-assembly-plugin、すべての依存関係のクラス ファイルを jar ファイルに解凍する を使用していました。実際、私は以下を使用しなければなりませんでしたappassembler-maven-plugin:

<plugin>
     <groupId>org.codehaus.mojo</groupId>
     <artifactId>appassembler-maven-plugin</artifactId>
     <version>1.1.1</version>
     <executions>
         <execution>
             <phase>package</phase>
             <goals>
                 <goal>assemble</goal>
             </goals>
             <configuration>
                 <assembledirectory>target</assembledirectory>
                 <programs>
                     <program>
                         <mainClass>my.package.myclass</mainClass>
                     </program>
                 </programs>
            </configuration>
        </execution>
    </executions>
</plugin>

target/次に、フォルダーから次のようにアプリケーションを CloudFoundry にデプロイしました

vmc push <myappname> --path=appassembler

appassembler/bin実行コマンドとして、フォルダー内の実行スクリプトの名前を選択する必要がありました。たとえばbin/start-up-myapp

于 2013-04-26T09:26:25.797 に答える