• 部署多功能模块依赖项目中解决的问题


    介绍

    做一个用户管理项目,采用的Spring-Cloud技术,还没确定最终的项目结构,所以展示的只是整个项目的一部分(Eureka在另一个工程中),我要说的工程是完整的,工程整体结构如下图所示。

    在部署该工程过程中主要遇到两个问题,两个问题均与pom.xml文件有关系,在此主要讨论pom文件的设置。展示pom文件如下,Gateway模块依赖UserManagement模块且两个模块均需要生成jar包提供给系统执行。
    MAP 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>
            <artifactId>spring-boot-starter-parent</artifactId>
            <groupId>org.springframework.boot</groupId>
            <version>2.3.1.RELEASE</version>
            <relativePath/>
        </parent>
        <groupId>com.aci.ma</groupId>
        <artifactId>MAP</artifactId>
        <version>1.0-SNAPSHOT</version>
        <name>MAP</name>
        <packaging>pom</packaging>
    
        <properties>
            <java.version>1.8</java.version>
            <spring.cloud-version>Hoxton.SR8</spring.cloud-version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.10</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.20</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.12</version>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring.cloud-version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <modules>
    <!--        按子目录名读取解析-->
            <module>UserManagement</module>
            <module>Gateway</module>
        </modules>
    
    </project>
    

    Gateway 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.aci.ma</groupId>
            <artifactId>MAP</artifactId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
        </parent>
        <artifactId>Gateway</artifactId>
        <packaging>jar</packaging>
        <name>Gateway</name>
    
        <properties>
            <skipTests>true</skipTests>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-autoconfigure</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
            <dependency>
                <groupId>com.aci.ma</groupId>
                <artifactId>UserManagement</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

    UserManagement 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>
    	<artifactId>UserManagement</artifactId>
    	<packaging>jar</packaging>
    
    	<name>UserManagement</name>
    	<description>MAP用户管理后端</description>
    
    	<parent>
    		<groupId>com.aci.ma</groupId>
    		<artifactId>MAP</artifactId>
    		<version>1.0-SNAPSHOT</version>
    		<relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    	</parent>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<skipTests>true</skipTests>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<!-- 字符编解码 -->
    			<groupId>commons-codec</groupId>
    			<artifactId>commons-codec</artifactId>
    			<version>1.11</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<!-- 做java代码和json的转换 -->
    			<groupId>com.alibaba</groupId>
    			<artifactId>fastjson</artifactId>
    			<version>1.2.70</version>
    		</dependency>
    		<dependency>
    			<!-- 封装io操作 -->
    			<groupId>commons-io</groupId>
    			<artifactId>commons-io</artifactId>
    			<version>2.5</version>
    		</dependency>
    		<dependency>
    			<!-- 针对面向切面编程 -->
    			<groupId>aopalliance</groupId>
    			<artifactId>aopalliance</artifactId>
    			<version>1.0</version>
    		</dependency>
    
    		<!--shiro和spring整合-->
    		<dependency>
    			<groupId>org.apache.shiro</groupId>
    			<artifactId>shiro-spring</artifactId>
    			<version>1.6.0</version>
    		</dependency>
    		<!--shiro核心包-->
    		<dependency>
    			<groupId>org.apache.shiro</groupId>
    			<artifactId>shiro-core</artifactId>
    			<version>1.6.0</version>
    		</dependency>
    		<!--shiro与redis整合-->
    		<dependency>
    			<groupId>org.crazycake</groupId>
    			<artifactId>shiro-redis</artifactId>
    			<version>3.1.0</version>
    		</dependency>
    		<dependency>
    			<groupId>com.h2database</groupId>
    			<artifactId>h2</artifactId>
    			<scope>runtime</scope>
    		</dependency>
    		<!-- <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-data-jpa</artifactId>
    		</dependency> -->
    		<dependency>
    			<groupId>org.apache.commons</groupId>
    			<artifactId>commons-lang3</artifactId>
    			<version>3.11</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-openfeign</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>com.baomidou</groupId>
    			<artifactId>mybatis-plus-boot-starter</artifactId>
    			<version>3.3.2</version>
    		</dependency>
        </dependencies>
    
        <build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    				<configuration>
    					<classifier>exec</classifier>
    				</configuration>
    			</plugin>
    		</plugins>
        </build>
    
    </project>
    

    以上是解决问题后的pom文件

    问题一:如何让打包出来的Gateway.jar对UserManagement.jar的依赖

    从网上找了些资料,有说换mvn命令的,有说将build标签放在父pom中的,有说可以只在依赖包中设置build标签打出包含所有它依赖包的jar文件。实践证明,mvn命令的效果是一样的(尽管过程中有时甚至都过不了mvn打包环节的,而且一会过了一会儿过不了);如果最终你想让子模块打出的包通过java -jar命令运行出来(运行不出来报什么清单的错),就必须在子pom文件中声明build标签。最终我在maven多模块项目中子模块可以运行,打包报错找到答案:需要将UserManagement模块的普通包和可执行包分开生成,既能执行也能提供Gateway的依赖。

    问题二:在阿里云流水线上打包报错找不到父模块的pom

    参考链接:maven报错Non-resolvable parent POM---pom找不到parent指明relativePath的值即可(由于我指明的值是relativePath的默认值,所以我认为可能的原因是需要展开relativePath标签,至少本地测试没问题)

  • 相关阅读:
    WCF系列(五) 也谈序列化(下)
    优秀程序员的十个习惯
    WCF系列(九) WCF安全系列(四) WSHttpBinding绑定之Transport安全模式
    TCP/IP 协议简单分析
    技巧:在Silverlight应用程序中进行数据验证
    WCF系列(三) WCF配置文件注释
    [转]ASP.NET(C#)常用代码30例
    服务器端 在iframe中控制父窗体div并调用父窗体Button
    GridView的模版列中加入按钮,触发按钮事件后,如何获取该行的某个值?
    通用分页 模块
  • 原文地址:https://www.cnblogs.com/tellw/p/13946473.html
Copyright © 2020-2023  润新知