有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Maven在现有Spring引导应用程序中利用属性文件?

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

在解决这一问题时,我别无选择,只能采取不同的方法

我花了无数个小时试图配置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

共 (1) 个答案

  1. # 1 楼答案

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

    我在教程中做了一些修改,使最终的ZIP结构直接包含Spring Boot应用程序依赖项的JAR和属性文件,而不包含其他目录。这是我修改过的拉链。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>