
分了多个模块,exam-web 里面有 @SpringBootApplication 类作为启动类,exam-web 里面和 exam-file 模块里面都有 Controller
在 idea 里面运行的时候,可以正常访问 exam-file 模块的 controller 接口,但 mvn install 打包以后,java -jar 启动 exam-web target 下的 jar 包,访问不到 exam-file 模块的接口, 解压 jar 包看了下是没有打包进去,exam-web 的 dependencies 里面已经添加了 exam-file 模块
想请教下,如何才能全部打包到一个 jar 里面
项目结构如下
├─.idea ├─.mvn │ └─wrapper ├─config ├─exam-common │ ├─src ├─exam-file │ └─src │ └─main │ └─java ├─exam-web │ └─src │ ├─main │ │ ├─java │ │ └─resources │ └─test └─logs ├─debug ├─error └─info 各个 pom.xml 文件内容(太长,省略了一些第三方依赖包):
<modules> <module>exam-common</module> <module>exam-web</module> <module>exam-file</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.lddq</groupId> <artifactId>exam-web</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.lddq</groupId> <artifactId>exam-common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.lddq</groupId> <artifactId>exam-file</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>17</source> <target>17</target> <encoding>UTF-8</encoding> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </path> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${mapstruct.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.lddq</groupId> <artifactId>exam-common</artifactId> </dependency> <dependency> <groupId>com.lddq</groupId> <artifactId>exam-file</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>17</source> <target>17</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>com.lddq.exam.start.ExamApplication</mainClass> </configuration> </plugin> </plugins> </build> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build> 1 zsdroid 2023 年 10 月 13 日 没有扫描到呗。启动类里加上 exam-file 的包名。 |
2 zsdroid 2023 年 10 月 13 日 另外<module>exam-file</module>放在<module>exam-web</module>前面 |
3 retanoj 2023 年 10 月 13 日 在 idea 里运行的时候,观察一下运行的 java 命令。你会发现 java -classpath 里跟了一堆.jar 包 |
4 hai046 2023 年 10 月 13 日 胖 jar <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/outputs</ouputDirectory> </configuration> </execution> </executions> </plugin> |
5 ikas 2023 年 10 月 13 日 parent : <?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> <groupId>com.lddq</groupId> <artifactId>exam-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <properties> <java.version>17</java.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring-boot.version>3.1.0</spring-boot.version> </properties> <modules> <module>exam-common</module> <module>exam-web</module> <module>exam-file</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <showWarnings>true</showWarnings> <showDeprecation>true</showDeprecation> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.26</version> </path> </annotationProcessorPaths> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> </plugin> </plugins> </build> </project> common: <?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.lddq</groupId> <artifactId>exam-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <packaging>jar</packaging> <artifactId>exam-common</artifactId> </project> file: <?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> &t;parent> <groupId>com.lddq</groupId> <artifactId>exam-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <packaging>jar</packaging> <artifactId>exam-file</artifactId> <dependencies> <dependency> <groupId>com.lddq</groupId> <artifactId>exam-common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project> web: <?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.lddq</groupId> <artifactId>exam-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <packaging>jar</packaging> <artifactId>exam-web</artifactId> <dependencies> <dependency> <groupId>com.lddq</groupId> <artifactId>exam-common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.lddq</groupId> <artifactId>exam-file</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> ---- java -jar exam-web-0.0.1-SNAPSHOT.jar 2023-10-13T21:16:58.496+08:00 INFO 18832 --- [ main] com.lddq.exam.start.ExamApplication : Started ExamApplication in 2.102 seconds (process running for 2.557) 2023-10-13T21:16:58.500+08:00 INFO 18832 --- [ main] com.lddq.exam.start.ExamApplication : hi file! |
6 chocotan 2023 年 10 月 13 日 spring-boot 的 maven plugin 从 parent 里面删掉 |
7 diagnostics 2023 年 10 月 14 日 spring-boot-maven-plugin 是普通 Spring 应用打包所有依赖到同一个包的插件。 你在 Root 的 POM 里面定义了 build 里面用了它,意味着所有子模块都会继承这个插件。 正确做法是:在 Root 里移除 spring-boot-maven-plugin ,放到 Web 项目里面就好,其他的模块你不用来发布出去给其他人用的话,只定义一个 maven-compiler-plugin ,能够编译出来就可以了。。。 |
8 cxsz OP |