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

Jav*_*aby 40 java maven-3

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

Yan*_*lea 70

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

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

 <build>
    <resources>
        <resource>
            <directory>src/main/config</directory>
        </resource>
    </resources>
 </build>
Run Code Online (Sandbox Code Playgroud)

从现在开始,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>
Run Code Online (Sandbox Code Playgroud)

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


Łuk*_*man 48

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

  1. *.jar 未正确加载(可能在路径中输错?)
  2. 您没有正确地处理资源,例如:/src/main/resources/conf/settings.properties在类路径中看到classpath:conf/settings.properties

  • URL协议"classpath:"特定于Spring. (5认同)

小智 5

默认情况下,maven 不包含来自“src/main/java”的任何文件。

你有两种可能的方法。

  1. 把你所有的资源文件(不同于 java 文件)放到“src/main/resources”——强烈推荐

  2. 添加到您的 pom(资源插件):

?

 <resources>
       <resource>
           <directory>src/main/resources</directory>
        </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
  </resources>
Run Code Online (Sandbox Code Playgroud)