Spring + Maven + .properties文件

时间:2014-05-12 09:02:46

标签: java spring maven properties

我使用Spring和Maven构建我的项目,并在src / main / resources路径(application.properties,log4j.properties)中有两个文件。如果我在IDE中打开我的项目并运行它,一切正常,可以更改application.properties文件中的值,并使用更改的值再次运行项目。但是,当我运行命令 mvn clean install 时,是的,我得到了.jar文件,但是我无法使用.properties文件配置这个.jar。此.jar在构建之前使用属性文件中的值。

我不知道这是否重要,但这是我在Spring应用程序上下文中定义属性文件的方式。

@PropertySource({"application.properties", "log4j.properties"})
public class AppConfig {

我将这些插件放在pom.xml文件中。好吗?你能帮我吗?看起来像build.jar项目在同一目录级别不知道.properties文件。

   <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.2</version>
            <!-- nothing here -->
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-4</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>cz.cvut.fit.bouchja1.ensemble.main.EnsembleApp</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>.</Class-Path> <!-- HERE IS THE IMPORTANT BIT -->
                    </manifestEntries>                        
                </archive>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>                    
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>

    </plugins>     

2 个答案:

答案 0 :(得分:1)

对于运行时属性,请使用Properties Api

答案 1 :(得分:0)

好的,似乎解决方案就是这样:

@PropertySource({"file:application.properties", "file:log4j.properties"})

运行 mvn clean install 并创建.jar文件后,我可以在.jar旁边添加application.properties和log4j.properties文件,我可以使用属性文件配置项目。

但是:当我想从Netbeans运行项目时,存在一个问题,即文件“不存在:...因为它没有在类路径中指定。我认为这可能会有所帮助:

@PropertySource({"classpath:log4j.properties", "classpath:application.properties", "file:application.properties", "file:log4j.properties"})

但不是真的。尝试后会抛出异常:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to load bean class: cz.cvut.fit.bouchja1.ensemble.spring.AppConfig; nested exception is java.io.FileNotFoundException: application.properties (Directory or file does not exist)

编辑:这正是我寻找的解决方案How to Exclude poperties file from jar file?