一、讀取配置文件的四種方式
這四種配置文件放置方式的讀取優先級依次遞減,具體可以查看官方文檔。
1.1jar包同級目錄下的config文件夾里的配置文件
其實我以前就見過這種方式了,只是不知道怎么做的,這樣便於修改服務器上的配置文件。
可以使用maven-source-plugin插件,然后運行命令mvn clean package將配置文件提取到項目外指定文件夾下。
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <version>${maven-resources-plugin.version}</version>
- <executions>
- <execution>
- <id>copy-resources</id>
- <phase>package</phase>
- <goals>
- <goal>copy-resources</goal>
- </goals>
- <configuration>
- <outputDirectory>${basedir}/target/config/</outputDirectory>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <includes>
- <include>**/*.properties</include>
- </includes>
- </resource>
- </resources>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>${maven-jar-plugin.version}</version>
- <configuration>
- <archive>
- <manifest>
- <addClasspath>true</addClasspath>
- <classpathPrefix>./lib/</classpathPrefix>
- <mainClass>${main-class}</mainClass>
- </manifest>
- </archive>
- <excludes>
- <exclude>**/*.properties</exclude>
- </excludes>
- </configuration>
- </plugin>
以上配置就可以實現將src/main/resources目錄下的所有后綴名為properties的文件復制到config文件夾下,同時打包時排除properties文件。
注意:需要將新建項目時自帶的spring-boot-maven-plugin插件去掉,否則不能生效。
去掉如下代碼:
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
1.2jar包當前目錄的配置文件
這里的方法與上面的基本相同,將<outputDirectory>${basedir}/target/config/</outputDirectory>換為<outputDirectory>${basedir}/target/</outputDirectory>即可(假設你的開發工具的輸出目錄為target)。
1.3classpath/config里的配置文件
這種不需要做特別的配置,只需要在src/main/resources目錄下新建一個config文件夾就好了。
1.4直接放在classpath里的配置文件(默認)
一般新建完SpringBoot項目就是這樣的。
二、打包時將依賴jar保存到指定路徑
在pom.xml文件添加如下內容即可。
2.1將依賴copy到lib目錄
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>${maven-dependency-plugin.version}</version>
- <executions>
- <execution>
- <id>copy-dependencies</id>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <outputDirectory>${project.build.directory}/lib/</outputDirectory>
- <includeScope>compile</includeScope>
- </configuration>
- </execution>
- </executions>
- </plugin>
2.2將依賴添加到classpath

打包后獲得的示例截圖:
三、獲取jar包里的資源路徑
其實這是個偽命題,因為jar自己就是個文件,如果用代碼獲取里面a.jar里面的b.jks文件,獲得路徑就變成了a.jar!/b.jks了。
jar中資源有其專門的URL形式: jar:!/{entry} 。所以,如果jar包中的類源代碼用File f=new File(相對路徑);的形式,是不可能定位到文件資源的,啟動jar包時會報出FileNotFoundException。
所以只有兩個選擇:
- 打包時將文件放在jar包外,然后通過file:/path/to/b.jks這種形式來獲取。
- 通過Class類的getResourceAsStream()方法來獲取 ,不過返回的是InputStream並不是路徑
可以參考這篇博客:https://blog.csdn.net/li2327234939/article/details/79565772
四、總結
maven插件太多了,maven-assembly-plugin還需要學習一下。