有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我们可以从一个maven依赖项到另一个maven依赖项拥有不同的类路径位置吗?

我正在开发一个由两个java项目组成的应用程序 项目A和项目B

在项目B pom中。在xml中,我将项目A表示为依赖项

在项目a的spring配置文件中,我使用propertyPlaceholders从属性文件加载值

这是spring jBPMConfig。项目A中定义的xml文件:

        <?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>

如您所见,我想加载全局。属性文件,位于src/main/resources下的任意位置

此配置在项目A的单元测试中起作用,因此来自全局的值。无论在哪里,属性都可以很好地加载。属性位于src/main/resources下

奇怪的是,当我在项目A中运行项目B时,编译失败,同时抱怨项目A无法初始化,因为项目A spring配置文件中使用的变量无法解析。这是因为全球变暖。根据占位符配置器的定义方式,在类路径中找不到属性文件

这是故障的主要原因:

         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是否可能具有不同的类路径位置

有人能帮我理解发生了什么事吗

注意,如果我提到像classpath:service/global这样的硬修复路径,问题就解决了。PropertyPlaceHolderConfigure中的属性。但我不想要一个固定的位置


共 (1) 个答案

  1. # 1 楼答案

    你说A是B的依赖项。属性的位置是什么,它们是否被添加到jar中?(它们可能在A的运行时可见,但未打包。在这种情况下,B无权访问这些属性)