参考文献

Maven遇到的问题

maven pom.xmlrepository标签不生效

  • 配置错误:请确认 <repository> 标签中的 URL 和仓库 ID 是否正确,并且 Maven 能够访问该 URL.如果 URL 不正确或无法访问,则 Maven 无法从该仓库中下载依赖项.

  • 依赖项已经存在:如果您的项目中已经存在所需的依赖项,那么即使您将 <repository> 标签添加到 pom.xml 文件中,Maven 也不会从该仓库中下载依赖项.这是因为 Maven 会优先使用本地仓库和缓存,以提高构建速度和效率.您可以使用 -U 标志强制 Maven 更新依赖项,以便它从您指定的仓库中下载最新的版本.

  • Maven 设置覆盖:如果您在 settings.xml 文件中配置了 <mirrors> 标签或其他仓库相关的设置,则可能会覆盖 pom.xml 文件中的 <repository> 标签设置.请检查您的 settings.xml 文件并确认是否有任何与仓库相关的设置可能会影响 Maven 的行为.

  • 若仍然无法解决问题,请尝试在命令行中运行 mvn clean install -X 命令,以启用详细的日志记录并获取更多信息.

Maven多模块打包问题

问题描述

  • 项目结构如下

    1
    2
    3
    4
    5
    6
    7
    8
    project
    |- business (SpringBoot项目)
    |- src
    |- pom.xml
    |- common (公共工具项目)
    |- src
    |- pom.xml
    |- pom.xml
  • 父级pom.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <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.7.4</version>
    <relativePath/>
    </parent>
    <groupId>cn.holelin</groupId>
    <artifactId>project</artifactId>
    <version>1.0.0.0</version>
    <packaging>pom</packaging>
    <name>project</name>
    <modules>
    <module>common</module>
    <module>business</module>
    </modules>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>11</java.version>
    <!-- 略 -->
    </properties>
    <dependencyManagement>
    <dependencies>
    <!-- 略 -->
    </dependencies>
    </dependencyManagement>
    <dependencies>
    <!-- 略 -->
    </dependencies>
    <repositories>
    <!-- 略 -->
    </repositories>
    </project>
  • commonpom.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <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>cn.holelin</groupId>
    <artifactId>project</artifactId>
    <version>1.0.0.0</version>
    </parent>

    <artifactId>common</artifactId>
    <packaging>jar</packaging>

    <name>common</name>

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
    <!-- 略 -->
    </dependencies>
    </project>

  • businesspom.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <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>cn.holelin</groupId>
    <artifactId>project</artifactId>
    <version>1.0.0.0</version>
    </parent>

    <artifactId>business</artifactId>
    <packaging>jar</packaging>

    <name>business</name>

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <common.version>1.0.0.0</common.version>
    </properties>

    <dependencies>
    <dependency>
    <groupId>cn.holelin</groupId>
    <artifactId>common</artifactId>
    <version>${common.version}</version>
    </dependency>
    <!-- 略 -->
    </dependencies>
    </project>

  • 使用mvn clean package -DskipTests打包

问题

  • 找不到启动类以及打包生成的business-1.0.0.0.jar并没有引入common-1.0.0.0.jar,导致business项目启动报错,找不到common中的类

解决方法

  • SpringBoot项目中增加org.springframework.boot:spring-boot-maven-plugin并指定启动类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
    <mainClass>com.med3d.athena.AthenaApplication</mainClass>
    <executable>true</executable>
    </configuration>

    </plugin>
    </plugins>
    </build>
  • 完整businesspom.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <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>cn.holelin</groupId>
    <artifactId>project</artifactId>
    <version>1.0.0.0</version>
    </parent>

    <artifactId>business</artifactId>
    <packaging>jar</packaging>

    <name>business</name>

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <common.version>1.0.0.0</common.version>
    </properties>

    <dependencies>
    <dependency>
    <groupId>cn.holelin</groupId>
    <artifactId>common</artifactId>
    <version>${common.version}</version>
    </dependency>
    <!-- 略 -->
    </dependencies>
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
    <mainClass>cn.holelin.Application</mainClass>
    <executable>true</executable>
    </configuration>

    </plugin>
    </plugins>
    </build>
    </project>