【发布时间】:2019-07-17 06:32:27
【问题描述】:
使用 Maven spring boot 插件重新打包没有帮助。
- 已尝试清理 .m2 文件夹。
- 从 sts 和命令行构建项目。
- 添加了组件扫描器来扫描实体,但在 maven 构建本身时失败。
- 添加了 Spring Boot Maven 插件以重新打包为可执行 jar 选项,似乎没有任何帮助。
父pom包含spring boot starter
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
以及以下模块
<modules>
<module>client-data</module>
<module>eureka-server</module>
<module>eureka-client-service-1</module>
<module>eureka-client-service-2</module>
</modules>
eureka-client-service-1 和 eureka-client-service-2 具有 client-data 作为依赖项。
由于client-data 是spring-boot 项目,包类型为jar,因此添加了以下代码以在客户端数据的uber jar 中创建uber jar
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
仍在执行mvn clean install -amd -e 会出现以下错误
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project eureka-client-service-1: Compilation failure: Compilation failure:
[ERROR] /C:/Users/balaji/trashcan/pcf-eureka-show-case/eureka-client-service-1/src/main/java/org/balaji/java/jee/pcf/eureka/client/service_1/boundary/EurekaClientEmployeesServiceEndpoint.java:[16,65] package org.balaji.java.jee.pcf.eureka.client.data.controller does not exist
[ERROR] /C:/Users/balaji/trashcan/pcf-eureka-show-case/eureka-client-service-1/src/main/java/org/balaji/java/jee/pcf/eureka/client/service_1/boundary/EurekaClientEmployeesServiceEndpoint.java:[17,61] package org.balaji.java.jee.pcf.eureka.client.data.entity does not exist
[ERROR] /C:/Users/balaji/trashcan/pcf-eureka-show-case/eureka-client-service-1/src/main/java/org/balaji/java/jee/pcf/eureka/client/service_1/boundary/EurekaClientEmployeesServiceEndpoint.java:[27,5] cannot find symbol
[ERROR] symbol: class OrganizationDataFixtureAdapter
[ERROR] location: class org.balaji.java.jee.pcf.eureka.client.service_1.boundary.EurekaClientEmployeesServiceEndpoint
[ERROR] /C:/Users/balaji/trashcan/pcf-eureka-show-case/eureka-client-service-1/src/main/java/org/balaji/java/jee/pcf/eureka/client/service_1/boundary/EurekaClientEmployeesServiceEndpoint.java:[42,32] cannot find symbol
[ERROR] symbol: class Employee
[ERROR] location: class org.balaji.java.jee.pcf.eureka.client.service_1.boundary.EurekaClientEmployeesServiceEndpoint
【问题讨论】:
-
模块不是依赖项。创建另一个真正将所有内容添加为依赖项并在其中隐藏所有内容的模块。你不能用
parent来编译所有的东西。 -
Spring boot jar 用于包含完整的可运行应用程序。它不应该用作图书馆。它的内容是一个自定义类加载器和启动器以及一堆嵌入式 jar。如果你想使用一个项目 A 作为另一个项目 B 的依赖项,那么 A 不应该是一个使用 Spring Boot 插件打包的 SPring Boot 应用程序。它应该是一个普通的旧库,打包为一个普通的旧 jar。
-
谢谢@JB Nizet。由于这是一个多模块 maven 项目,因此行为是从父 pom 继承的,因为我使用的是 spring-boot-starter。有什么方法可以在不更改项目结构的情况下删除 spring-boot 行为。
-
感谢@CodeMatrix。父项目只是一个 pom 项目,子模块是深度打包的,意味着嵌套模块。
-
Spring Boot 启动器是一个库。我猜你说的是spring boot plugin。我不知道:我不使用 Maven。但我想我不会默认应用 Boot 插件并尝试将其删除,而是默认情况下不会应用它,而只会将其添加到实际上是 Spring Boot 应用程序的 the 项目中。跨度>
标签: java maven spring-boot