如何编写maven build来为classpath添加资源?

时间:2012-01-30 11:40:48

标签: java maven-3

我正在使用带有简单maven安装的maven构建一个jar。 如果我将文件添加到src/main/resources,它可以在类路径中找到,但它有一个配置文件夹,我希望该文件可以进入,但是在config文件夹中移动它会使它从类路径中消失。

3 个答案:

答案 0 :(得分:69)

将配置文件放入 src / main / resources 的子文件夹的更简洁的替代方法是增强类路径位置。使用Maven非常容易。

例如,将您的属性文件放在新文件夹 src / main / config 中,并将以下内容添加到您的pom中:

 <build>
    <resources>
        <resource>
            <directory>src/main/config</directory>
        </resource>
    </resources>
 </build>

从现在开始, src / main / config 下的每个文件都被视为类路径的一部分(请注意,如果需要,可以从最终的jar中排除其中的一些文件:只需添加构建部分:

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>my-config.properties</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>

这样当您从IDE运行应用程序时,可以在类路径中找到 my-config.properties ,但在最终分发版中将保留在jar外部。

答案 1 :(得分:46)

如果您在src/main/resources目录中放置任何内容,则默认情况下它将以最终*.jar结尾。如果你从其他项目中引用它并且在类路径中找不到它,那么你就会遇到这两个错误中的一个:

  1. *.jar未正确加载(可能是路径中的拼写错误?)
  2. 您没有正确地处理资源,例如:/src/main/resources/conf/settings.properties在类路径中被视为classpath:conf/settings.properties

答案 2 :(得分:2)

By default maven does not include any files from "src/main/java". 
You have two possible way to that.
  1. put all your resource files (different than java files) to "src/main/resources" - this is highly recommended  
  2. Add to your pom (resource plugin):

 <resources>
       <resource>
           <directory>src/main/resources</directory>
        </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
  </resources>