我有一个多模块maven-spring-boot项目,包含2个服务(可执行jar)和3个库(仅作为依赖项加载)。
项目结构为
|--- Parent Project
| |--- pom.xml
| |--- libraries
| | | --- lib1
| | | |--- some code
| | | |--- pom.xml
| | |--- lib2
| | | |--- some code
| | | |--- pom.xml
| |--- services
| | | --- service1
| | | |--- src
| | | | |--- main
| | | | |--- ressources
| | | | | |--- several .properties files
| | | |--- pom.xml
| | | --- service2
| | | |--- src
| | | | |--- main
| | | | |--- ressources
| | | | | |--- several .properties files
| | | |--- pom.xml
我的依赖关系工作得很好,我可以完全使用这些模块,在父pom中配置如下
<groupId>com.company.project</groupId>
<artifactId>app</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<modules>
<module>libraries/lib1</module>
<module>libraries/lib2</module>
<module>services/service1</module>
<module>services/service2</module>
</modules>
...
但是我在构建过程中遇到了一个问题。在父pom中配置为this
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skip>true</skip>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
目前我只想构建service1。构建过程也很有效。在service1的pom中,配置如下:
<build>
<resources>
<resource>
<directory>resources</directory>
<filtering>true</filtering>
<targetPath>${target.directory}</targetPath>
<includes>
<include>*.properties</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.soemstuff.mainclass</mainClass>
<outputDirectory>${target.directory}</outputDirectory>
<finalName>service1-${revision}</finalName>
<fork>true</fork>
<skip>false</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<overwrite>true</overwrite>
<outputDirectory>${target.directory}</outputDirectory>
<resources>
<resource>
<directory>${basedir}</directory>
<filtering>false</filtering>
<includes>
<include>Dockerfile</include>
</includes>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
如前所述,我在项目根目录下的target/service1目录中创建了一个可执行jar。但是spring在启动时失败,因为它说spring.properties(我定义了几个配置文件,找不到)不存在。如果我从intellij启动项目,它就可以工作(我用注解定义了属性文件)。
事实上,当我删除所有目标目录并在根pom中使用“mvn package”时,maven还生成子模块(service1)的目标。现在,当我在intellij中启动它时,它也找不到属性文件。当我随后删除service1的目标文件夹并从intellij启动它时,它就工作了。
有人能帮我把这些属性打包到jar里吗?也可以选择将文件复制到与.jar相同的目录中,但我尝试了,spring找不到它,因为它显然不在类路径中。
1条答案
按热度按时间6pp0gazn1#
似乎,我的service1.pom中的maven资源插件(我用来将dockerfile复制到根目录中的自定义目标目录)就是问题所在。我删除了插件,现在构建工作如预期。
好吧,但我不知道为什么。如果有人知道这样做的原因,请随时发表评论。