如何使用Maven在现有Spring Boot应用程序中使用属性文件?

问题描述 投票:0回答:1

我正在尝试利用我公司的Maven存储库上托管的现有Spring Boot应用程序。此应用程序从Kafka服务器获取消息并将它们放在Mongo数据库中。使其工作所需的只是为其提供定义Kafka和Mongo服务器的属性文件。我需要创建一个Maven项目,将该应用程序作为依赖项导入,并为其提供配置的属性文件。只有两个文件应该是pom.xml和application.properties。最终结果应该是一个可运行的JAR,它使用我的属性文件执行依赖项(现有的Spring Boot应用程序)。

我没有选择采取不同的方法来解决这个问题。

我花了无数个小时试图配置Maven来做到这一点。在使用mvn spring-boot:run命令时,我终于成功地使其工作,但我无法让它生成正常工作的可运行JAR文件。

我像其他任何人一样包括我的依赖:

<dependencies>
  <dependency>
    <groupId>com.company.dept</groupId>
    <artifactId>consume-to-mongo-app</artifactId>
    <version>1.0</version>
  </dependency>
</dependencies>

然后,我从依赖项中定义主类,如下所示:

<properties>
  <mainClass>org.springframework.boot.loader.JarLauncher</mainClass>
</properties>

而且,我的插件部分看起来像这样:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
          <mainClass>org.springframework.boot.loader.JarLauncher</mainClass>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>repackage</goal>
        </goals>
        <configuration>
          <classifier>exec</classifier>
              <mainClass>org.springframework.boot.loader.JarLauncher</mainClass>
        </configuration>
      </execution>
    </executions>
</plugin>

运行mvn spring-boot:run时应用程序运行正常

 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.4.RELEASE)

运行mvn clean package,然后java -jar myjar.jar我得到成千上万的这些:

)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Caused by: java.lang.reflect.InvocationTargetException
    ... 1024 more
java spring maven spring-boot dependencies
1个回答
0
投票

我能够通过使用Maven Assembly Plugin创建一个包含我的依赖项JAR和我的属性文件的自定义压缩ZIP文件来解决我的问题。在部署服务器上,可以解压缩此ZIP,并且可以在生成的目录中运行jar,它将获取属性文件。我按照本教程:https://medium.com/@kasunpdh/using-the-maven-assembly-plugin-to-build-a-zip-distribution-5cbca2a3b052

我从教程中做了一些修改,让我的最终ZIP结构直接包含我的Spring Boot App依赖项的JAR和我的属性文件,其中没有包含其他目录。这是我修改过的zip.xml文件:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  <!--<modelVersion>4.0.0</modelVersion>-->
  <id>zip</id>
  <includeBaseDirectory>true</includeBaseDirectory>

  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <directory>${project.basedir}/src/main/resources</directory>
      <outputDirectory>.</outputDirectory>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>.</outputDirectory>
      <excludes>
        <exclude>${project.groupId}:${project.artifactId}:jar:*</exclude>
      </excludes>
    </dependencySet>
  </dependencySets>

</assembly>
© www.soinside.com 2019 - 2024. All rights reserved.