2016-09-29 6 views
0

、私は依存関係として、プロジェクトAを示しています。あるクラス依存関係から別の依存関係へのクラスパスの位置を変えることはできますか?私はプロジェクトBののpom.xmlで プロジェクトAとプロジェクトB.</p> <p>2つのJavaプロジェクトで構成されるアプリに取り組んでいます

プロジェクトAのバネ設定ファイルでは、propertyPlaceholdersを使用してプロパティファイルから値を読み込みます。あなたは私がSRC /メイン/資源の下で、どこからでもglobal.propertiesファイルをロードしたい見ることができるように

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



      <bean id="dataSource" 
       class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

       <property name="driverClassName" value="${jBPM.database.driver.class.name}" /> 
       <property name="url" value="${jBPM.database.url}" /> 
       <property name="username" value="${jBPM.database.user.name}" /> 
       <property name="password" value="${jBPM.database.user.password}" /> 
      </bean> 


      <bean name="propertyPlaceholder" 
       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
       <property name="locations"> 
       <list> 
        <value>classpath:/**/global.properties</value> 
       </list> 
       </property> 
      </bean> 

これは、プロジェクトAで定義され、ばねjBPMConfig.xmlファイルです。

この設定はプロジェクトAの単体テストで機能します。したがって、global.propertiesの値は、global.propertiesがsrc/main/resourcesにある場合はどこにでもロードされます。

奇妙なことに、プロジェクトAを呼び出すときにプロジェクトBを実行すると、プロジェクトAのバネ設定ファイルで使用される変数を解決できなかったため、プロジェクトAを初期化できないという苦情がありました。これは、placeholderConfigurerが定義されている方法で、global.propertiesファイルがクラスパスに見つからないためです。

これは、障害の主な原因である:

  Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'jBPM.database.driver.class.name' in string value "${jBPM.database.driver.class.name}" 
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:173) 
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:125) 
    at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer$PlaceholderResolvingStringValueResolver.resolveStringValue(PropertyPlaceholderConfigurer.java:258) 
    at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveStringValue(BeanDefinitionVisitor.java:282) 
    at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveValue(BeanDefinitionVisitor.java:204) 
    at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitPropertyValues(BeanDefinitionVisitor.java:141) 
    at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitBeanDefinition(BeanDefinitionVisitor.java:82) 
    at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:206) 
    ... 77 more 

プロジェクトAとBはおそらく異なるクラスパスの場所を持つことができますか?

誰かが何が起こっているのか理解できますか?

私がpropertyplaceholderconfigurerのclasspath:service/global.propertiesのようなハード解決策のパスを言及すると、この問題は解決されることに注意してください。しかし、私は修正箇所を望んでいません。

+0

プロジェクトの両方のアプリケーションコンテキストXMLファイルを追加できますか?あなたが遭遇したエラー? – Veeram

+0

私の投稿を編集しました –

答えて

0

あなたはAがBの依存関係であると言います。プロパティの場所は何ですか?それらはJARに追加されますか? (実行時には表示されますがパッケージ化されていない場合は、Bにはこれらのプロパティにアクセスできません)

+0

.propertiesはsrc/main/resources/service/< - ここにプロジェクトAの中にあります。プロジェクトAをパッケージ化するとプロパティファイルがそのjarに追加されます。 classpath:service/global.properties in propertyplaceholderconfigurerのようなハード・フィックス・パスについて言えば、問題は解決されることに注意してください。しかし、私は修正の場所を望んでいない –

関連する問題