【问题标题】:spring-boot-maven-plugin not pulling in dependent classes into jarspring-boot-maven-plugin 没有将依赖类拉入 jar
【发布时间】:2019-02-01 14:00:42
【问题描述】:

spring-boot-maven-plugin 存在问题,它在生成的 jar 文件中不包含依赖类。

docs 中,它声明范围为provided 的依赖项将包含在jar 文件中,但我无法让它包含它们。

我有一个包含 2 个子模块的项目:modelrestServer。在model 模块中,我想使用swagger 基于openApi 输入模型进行代码生成。生成的类放在一个 jar 文件中:model/target/rest-model-0.0.1-SNAPSHOT.jar

restServer 模块中,我有 Spring RestController 和 Application java 代码,并希望将 model 类“拉入”到生成的 jar 文件中:restServer/target/rest-server-0.0.1-SNAPSHOT.jar 使用 spring-boot-maven-plugin 构建器,但它的不包括 model 子模块中的任何内容。

下面列出了整个项目结构和pom文件。

如何让spring-boot-maven-pluginmodel 子模块中提取类文件,从而有效地创建一个“胖”独立的jar?

项目结构

project-root/
    pom.xml # parent pom
    model/
        pom.xml
        src/main/openApi/model.json
        target/
            generated-sources/* (package: com.me.rest.model.*)
            rest-model-0.0.1-SNAPSHOT.jar

    restServer/
        pom.xml
        src/main/java/com/me/rest/
            controller/Controller.java
            Application.java

父 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.2.RELEASE</version>
  </parent>

  <groupId>com.me</groupId>
  <artifactId>rest-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>rest</name>
  <packaging>pom</packaging>

  <description>Swagger codegen for Spring Rest Server sandbox project</description>

  <scm>
    <connection>scm:git:git@github.com:swagger-api/swagger-codegen.git</connection>
    <developerConnection>scm:git:git@github.com:swagger-api/swagger-codegen.git</developerConnection>
    <url>https://github.com/swagger-api/swagger-codegen</url>
  </scm>

  <prerequisites>
    <maven>2.2.0</maven>
  </prerequisites>

  <modules>
    <module>model</module>
    <module>restServer</module>
  </modules>
</project>

模型/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.kontron</groupId>
        <artifactId>rest-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <groupId>com.kontron</groupId>
    <artifactId>rest-model</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies> ... </dependencies>

    <build>
        <plugins>
            <!-- Swagger codegen plugin -->
            <plugin>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-codegen-maven-plugin</artifactId>
                <version>2.3.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration> ... </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

restServer/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
      <groupId>com.kontron</groupId>
      <artifactId>rest-parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>rest-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.kontron</groupId>
            <artifactId>rest-model</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>provided</scope>     <!-- Notice scope is provided -->
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.1.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

更新:添加生成的 META-INF/MANIFEST.MF:

Manifest-Version: 1.0
Implementation-Title: rest-server
Implementation-Version: 0.0.1-SNAPSHOT
Built-By: bjohnson
Implementation-Vendor-Id: com.me
Spring-Boot-Version: 2.1.2.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.me.rest.Application
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.5.4
Build-Jdk: 1.8.0_144
Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo
 ot-starter-parent/rest-parent/rest-server

【问题讨论】:

  • 依赖项放在 BOOT-INF\lib\ 你在你的 JAR 中检查了这个文件夹吗?
  • @SimonMartinelli 哇,看起来确实存在!我正在寻找类结构“com/me/rest/...”。使用“jar tf”我看到 BOOT-INF/lib/rest-model-0.0.1-SNAPSHOT.jar。我猜 jar 中的其他类都可以使用它,对吧?
  • 是的,我添加了这个作为答案。感谢您接受这个答案。

标签: spring maven spring-boot spring-boot-maven-plugin


【解决方案1】:

依赖项放在重新打包的JAR文件的BOOT-INF\lib\中。

此路径将添加到您的 Spring Boot 应用程序的类路径中。

【讨论】:

  • 我用 Manifest 添加了一个更新。我应该在那里看到路径,还是在内部处理?
  • 不,因为 Spring Boot 有它自己的类加载器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2017-06-30
  • 2013-05-09
  • 2019-12-27
相关资源
最近更新 更多