分了多个模块,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 18:44:30 +08:00 1
没有扫描到呗。启动类里加上 exam-file 的包名。
|
2
zsdroid 2023-10-13 18:46:08 +08:00 1
另外<module>exam-file</module>放在<module>exam-web</module>前面
|
3
retanoj 2023-10-13 18:51:56 +08:00 1
在 idea 里运行的时候,观察一下运行的 java 命令。你会发现
java -classpath 里跟了一堆.jar 包 |
4
hai046 2023-10-13 19:00:19 +08:00 1
胖 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</outputDirectory> </configuration> </execution> </executions> </plugin> |
5
ikas 2023-10-13 21:19:23 +08:00 1
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> <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 21:25:34 +08:00 1
spring-boot 的 maven plugin 从 parent 里面删掉
|
7
diagnostics 2023-10-14 11:05:01 +08:00 1
spring-boot-maven-plugin 是普通 Spring 应用打包所有依赖到同一个包的插件。
你在 Root 的 POM 里面定义了 build 里面用了它,意味着所有子模块都会继承这个插件。 正确做法是:在 Root 里移除 spring-boot-maven-plugin ,放到 Web 项目里面就好,其他的模块你不用来发布出去给其他人用的话,只定义一个 maven-compiler-plugin ,能够编译出来就可以了。。。 |
8
cxsz OP |