精华内容
下载资源
问答
  • 2020-04-14 17:44:24

    报错信息:

    Error:java: Annotation processing is not supported for module cycles. 
    Please ensure that all modules from cycle [模块A,模块B,模块C] are excluded from annotation processing
    

    编译时就无法通过

    原因:

    maven項目在分模块进行开发时,模块之间只能是单方向依赖/传递依赖,但是万万不可多个模块之间互相依赖。这样是无法编译通过的。

    解决方法:

    1.互相依赖的类或方法,放到公共模块,这样就可以啦!但是,有时候代码之间的依赖性是很强的,只能是重新规划一下模块之间的功能。遇到这种情况往往是很令人头疼的,往往是仁者见仁智者见智啦!
    2.网上有的小伙伴说引入XX (我找不到了 /狗头)依赖,将ABC模块放到一起编译,但是这样代码还是混乱的,只是治标不治本(当然我自己还没试过,哈哈哈)

    更多相关内容
  • 原项目类型:javaWeb项目两个源码包一个产品基础包,一个基于产品基础包的开发包,两个都是普通javaWeb项目。本来应该是开发包可以单边引用产品基础包的,由于开发不规范最终导致产品基础包和开发包存在了相互引用。...

    近期在做一个普通javaweb项目转转换成maven项目的任务。

    原项目类型:javaWeb项目

    两个源码包一个产品基础包,一个基于产品基础包的开发包,两个都是普通javaWeb项目。本来应该是开发包可以单边引用产品基础包的,由于开发不规范最终导致产品基础包和开发包存在了相互引用。

    针对当时我们的项目我考虑了两种方案:

    方案一、将产品基础包和开发包整合成一个源码包,再重构为Maven项目。

    产品基础包编译成jar包,jsp页面整合到开发包中。后续产品基础包如果升级,重新编译成jar包更换现有jar即可,涉及用到的jsp需要项目组开发团队整合到正在使用的开发包中按正常版本发布流程提交源码即可。(这种方案需人工整合为一个源码包,相互间的引用自然就不存在了)

    方案二、使用Maven聚合工程

    使用Maven聚合工程,将产品基础包和开发包分别构建成两个Maven模块,然后将开发包目前最新版本打成jar包放入Maven仓库由产品基础包引用从而断掉产品基础包对开发包之前的引用,之后开发时务必做到开发包单边引用产品基础包,便不会再出现产品基础包对开发包的引用。剩下的就由开发包单边依赖产品基础包即可,从而可以避免循环依赖。后续产品基础包如果升级,按正常版本发布流程提交源码即可,无需人工整合,各自提交到各自的Maven模块,无影响。(这种方案后期要确保:开发人员严格遵守开发规范开发包单边引用产品基础包)

    考虑到一下两种原因,最终采用了第二种方案:

    1、整合两个源码包需要花费很长时间影响进度,且整合过程中也存在一定的风险。

    2、后续产品基础包可能存在升级

    3、还有其他模块功能待整合上线,需要考虑到可扩展性。

    很​多​时​候​随​着​项​目​的​膨​胀​,模​块​会​越​来​越​多​,如​果​设​计​上​ 稍​有​不​慎​就​会​出​现​模​块​之​间​相​互​依​赖​的​情​况​。​这​对​于​使​用​Maven的​用​户​是​比​较​痛​苦​的​,因​为​出​现​模​块​之​间​相​互​依​赖​的​话​在​构​建​的​时​候​就​会​失​败​,Maven通​常​要​先​编​译​被​依​赖​的​模​块​,如​果​出​现​相​互​依​赖​Maven就​不​知​道​该​怎​么​办​了​。​下​图​描​述​了​三​个​Maven模​块​相​互​依​赖​的​场​景​:

    图​中​模​块​C依​赖​于​模​块​B,模​块​B依​赖​于​模​块​A,而​模​块​A又​依​赖​于​模​块​C,这​样​就​出​现​了​相​互​依​赖​情​况​,如​果​运​行​mvn compile会​出​现​如​下​错​误​:

    [INFO] Scanning for projects... [ERROR] The projects in the reactor contain a cyclic reference: Edge between 'Ve rtex{label='org.kuuyee.sample:module-C:1.0-SNAPSHOT'}' and 'Vertex{label='org.ku uyee.sample:module-B:1.0-SNAPSHOT'}' introduces to cycle in the graph org.kuuyee .sample:module-B:1.0-SNAPSHOT --> org.kuuyee.sample:module-A:1.0-SNAPSHOT --> or g.kuuyee.sample:module-C:1.0-SNAPSHOT --> org.kuuyee.sample:module-B:1.0-SNAPSHO T -> [Help 1][ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit ch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR] [ERROR] For more information about the errors and possible solutions, please rea d the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectCycleEx ception

    1. 使​用​build-helper-maven-plugin解​决​相​互​依​赖​的​问​题​我​的​解​决​办​法​就​是​先​把​相​互​依​赖​的​模​块​整​合​在​一​起​,相​当​于​把​这​些​模​块​合​并​成​一​个​单​独​的​模​块​统​一​编​译​,

    这​样​就​产​生​了​一​个​合​并​模​块​D,我​们​把​它​当​做​一​个​辅​助​构​建​模​块​,然​后​让​A、​B、​C模​块​都​依​赖​于​D模​块​,这​样​的​话​就​可​以​成​功​编​译​A、​B和​C模​块​,

    要​想​把​A、​B、​C三​个​模​块​整​合​在​一​起​编​译​,需​要​借​助​build-helper-maven-plugin插​件​,这​个​插​件​在​Maven构​建​周​期​提​供​一​些​辅​助​功​能​,下​面​列​出​插​件​的​提​供​的​功​能​列​表​: build-helper:add-source:添​加​更​多​的​构​建​源​码​目​录​ build-helper:add-test-source:添​加​更​多​的​测​试​源​码​目​录​ build-helper:add-resource:添​加​更​多​的​资​源​目​录​ build-helper:add-test-resource:添​加​更​多​的​测​试​资​源​目​录​ build-helper:attach-artifact:在​安​装​和​部​署​周​期​附​加​artifacts build-helper:maven-version:添​加​一​个​指​定​当​前​Maven版​本​的​属​性​ build-helper:parse-version:添​加​一​个​指​定​组​件​版​本​的​属​性​ build-helper:released-version:决​定​当​前​项​目​的​最​终​版​本​ build-helper:remove-project-artifact:从​本​地​资​源​库​中​移​除​项​目​的​artifacts build-helper:reserve-network-port:Reserve a list of random and unused network ports. 在​这​里​我​们​要​用​到​build-helper:add-source这​个​功​能​,将​模​块​A、​B、​C的​源​码​路​径​加​进​来​。​ 我​们​再​添​加​一​个​辅​助​模​块​D,在​辅​助​模​块​D中​使​用​build-helper-maven-plugin插​件​,然​后​让​模​块​A、​B、​C都​依​赖​于​辅​助​模​块​D,模​块​D的​POM模​型​如​下​: 例 1. 辅​助​模​块​D的​POM模​型​

    java代码:

    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">

    org.kuuyee.sample

    sample-parent

    1.0-SNAPSHOT

    ../../pom.xml

    4.0.0

    org.kuuyee.sample

    module-D

    1.0-SNAPSHOT

    jar

    module-D

    http://maven.apache.org

    UTF-8

    ../../module/module-A/src/main/java

    ../../module/module-B/src/main/java

    ../../module/module-C/src/main/java

    org.codehaus.mojo

    build-helper-maven-plugin

    add-source

    generate-sources

    add-source

    ${module.a.src}

    ${module.b.src}

    ${module.c.src}

    junit

    junit

    3.8.1

    test

    maven处理循环依赖

    在多maven工程的项目里,如果工程间存在循环依赖,构建就会报错。本文介绍一下循环依赖要怎么处理

    1、什么是循环依赖

    如果工程A依赖工程B,工程B又依赖工程A,就会形成循环依赖。或者A依赖B,B依赖C,C依赖A,也是循环依赖

    总的来说,在画出工程依赖图之后,如果发现工程间的依赖连线形成了一个有向循环图,则说明有循环依赖的现象

    如果循环依赖发生在工程之间,则会影响构建,因为maven不知道应该先编译哪个工程。如果循环依赖发生在同一个工程的模块之间,虽然不影响编译,但是也是一种不好的实践,说明模块的设计有问题,应该避免

    如果在模块内部,有几个类互相调用的话,我觉得可能是正常的。比如观察者模式里面,Observer和Observable就是互相依赖的

    2、怎么解决循环依赖

    目前知道有2个办法可以解决

    第一个办法是用build-helper-maven-plugin插件来规避。比如A依赖B,B依赖C,C依赖A的情况。这个插件提供了一种规避措施,即临时地将工程A、B、C合并成一个中间工程,编译出临时的模块D。然后A、B、C再分别依赖临时模块D进行编译

    这种方法可以解决无法构建的问题,但是只是一个规避措施,工程的依赖关系依然是混乱的

    第二个办法是通过重构,从根本上消除循环依赖

    3、如何重构

    目前也知道2个重构的思路

    第一个办法是平移,比如A和B互相依赖,那么可以将B依赖A的那部分代码,移动到工程B中,这样一来,B就不需要继续依赖A,只要A依赖B就可以了,从而消除循环依赖

    第二个办法是下移,比如A和B互相依赖,同时它们都依赖C,那么可以将B和A相互依赖的那部分代码,移动到工程C里,这样一来,A和B相互之间都不依赖,只继续依赖C,也可以消除循环依赖

    这两种重构方式都是可行的,具体采用哪种方式要根据实际情况来判断。不管采取哪种方式,都需要对代码进行修改,有时候并不是那么容易的

    展开全文
  • 直接在父pom文件引入如下插件将会导致Maven打的微服务Jar包不会将外部依赖导入其中,且其他模块依赖模块的时候可能出现找不到类的报错。即无法通过 java -jar xxx.jar 命令来启动服务。 <build> <...

    场景

    最近在学习使用Jenkins自动化部署分布式微服务的时候,需要将微服务打成Jar包发送到服务器制作成镜像供Jenkins拉取运行,了解到 spring-boot-maven-plugin 插件可以完成Maven工程的打包任务。

    问题

    直接在父pom文件引入如下插件将会导致Maven打的微服务Jar包不会将外部依赖导入其中,且其他模块在依赖本模块的时候可能出现找不到类的报错。即无法通过 java -jar xxx.jar 命令来启动服务。

    <build>
    
        <plugins>
    
            <plugin>
    
                <groupId>org.springframework.boot</groupId>
    
                <artifactId>spring-boot-maven-plugin</artifactId>
    
            </plugin>
    
        </plugins>
    
    </build>
    

    原因

    spring-boot-maven-plugin 打出来的Jar包默认是不可依赖的,需要进行一些额外的配置。
    比如一个微服务工程中,往往会抽取出来一个 common 公共模块,在 common 公共模块中使用了 spring-boot-maven-plugin 的默认配置build,其他依赖了 common 模块的比如 provider 或者 order 在使用打包命令进行打包时就会出错,错误是在 provider 或者 order 中找不到 common 中的类,原因就是此插件默认默认打包出来的Jar是不可依赖的。

    解决方案

    在父工程pom文件和公共模块pom文件做一些修改

    <!-- 父pom -->
    
    <build>
    
        <plugins>
    
            <!-- 资源文件拷贝插件 -->
    
            <plugin>
    
                <groupId>org.apache.maven.plugins</groupId>
    
                <artifactId>maven-resources-plugin</artifactId>
    
                <configuration>
    
                    <encoding>UTF-8</encoding>
    
                </configuration>
    
            </plugin>
    
            <!-- Java编译插件 -->
    
            <plugin>
    
                <groupId>org.apache.maven.plugins</groupId>
    
                <artifactId>maven-compiler-plugin</artifactId>
    
                <configuration>
    
                    <source>1.8</source>
    
                    <target>1.8</target>
    
                    <encoding>UTF-8</encoding>
    
                </configuration>
    
            </plugin>
    
            <!-- maven打包插件 -->
    
            <plugin>
    
                <groupId>org.springframework.boot</groupId>
    
                <artifactId>spring-boot-maven-plugin</artifactId>
    
                <executions>
    
                    <execution>
    
                        <goals>
    
                            <goal>repackage</goal>
    
                        </goals>
    
                    </execution>
    
                </executions>
    
            </plugin>
    
        </plugins>
    
    </build>
    
    
    
    <!-- common pom -->
    
    <build>
    
        <plugins>
    
            <plugin>
    
                <groupId>org.springframework.boot</groupId>
    
                <artifactId>spring-boot-maven-plugin</artifactId>
    
                <!-- 这个属性为可执行jar包的名字后缀 -->
    
                <configuration>
    
                    <classifier>exec</classifier>
    
                </configuration>
    
            </plugin>
    
        </plugins>
    
    </build>
    
    <!-- 其余子模块会继承父模块 -->
    

    配置完后在进行 mvn clean package 或者 mvn clean install 命令打包服务后,可用 java -jar xxx.jar 正常启动。

    其他细节

    在使用 spring-boot-maven-plugin 插件进行打包操作的时候强烈建议指明JDK版本,不然可能在使用了一些Java8新特性的时候可能受到类似不识别Lambda,请使用Resource8这样的错误。

    <properties>
    
        <java.version>1.8</java.version>
    
        <maven.compiler.source>1.8</maven.compiler.source>
    
        <maven.compiler.target>1.8</maven.compiler.target>
    
    </properties>
    

    原文参考:
    https://blog.csdn.net/DamonREN/article/details/85091900

    展开全文
  • Maven本地子模块互相依赖

    千次阅读 2020-01-06 09:10:16
    很多时候,我们自己的项目有许多的子模块,之间互相有依赖,但是我们没有私服来发布打好的jar包. 最常见的就是本地有一Util包, 随手写的其他项目想要引用, 却苦于没有私服. 把代码扔到同一项目, 强迫症有忍不住. 这...

    很多时候,我们自己的项目有许多的子模块,之间互相有依赖,但是我们没有私服来发布打好的jar包.

    最常见的就是本地有一个Util包, 随手写的其他项目想要引用, 却苦于没有私服. 把代码扔到同一个项目, 强迫症有忍不住.

    这个问题Maven是有解决方案的.本质上还是打包发布,只是不再发布到远端的Maven仓库,而是打包完成之后, 将这个jar包安装到本地的maven即可.

    首先,在你的util子模块下执行下列命令.

    # 打包
    mvn clean package
    # 安装到本地mvn
    mvn install:install-file -Dfile=your_jar_file_path.jar -DgroupId=your_groupId -DartifactId=your_artifactId -Dversion=your_version
    # 检查是否安装成功
    ll ~/.m2/your_groupId/your_artifactId/
    

    之后, 在需要引入这个jar包的项目的pom.xml文件中,按照正常使用添加即可.

        <dependency>
            <groupId>your_groupId</groupId>
            <artifactId>your_artifactId</artifactId>
            <version>your_version</version>
        </dependency>
    

    当mvn需要引入的时候,会自动从本地仓库去加载的.


    完。





    联系我

    最后,欢迎关注我的个人公众号【 呼延十 】,会不定期更新很多后端工程师的学习笔记。
    也欢迎直接公众号私信或者邮箱联系我,一定知无不言,言无不尽。

    以上皆为个人所思所得,如有错误欢迎评论区指正。

    欢迎转载,烦请署名并保留原文链接。

    联系邮箱:huyanshi2580@gmail.com

    更多学习笔记见个人博客或关注微信公众号 <呼延十 >------>呼延十

    展开全文
  • 创建maven模块项目,编写代码,添加子模块相互依赖; 举例来说,父项目为cloud-maven-learn,子项目为learn-server(springcloud 的服务治理和服务发现项目,集成eureka),learn-product(springcloud业务模块...
  • 通过执行mvn -pl 模块名 -am实现存在相互依赖模块打包
  • 1.使用第一声明者优先原则 2.使用路径近者优先原则 3.手动排除依赖 4.版本锁定
  • 1、在D盘创建一个文件夹:ssm2、在ssm文件夹下,用maven指令创建两个项目(一个java项目,一个web项目)创建 ssm-biz 的java项目的指令如下:mvn:archetype:create -DgroupId=...
  • ​这​对​于​使​用​Maven的​用​户​是​比​较​痛​苦​的​,因​为​出​现​模​块​之​间​相​互​依​赖​的​话​在​构​建​的​时​候​就​会​失​败​,Maven通​常​要​先​编​译​被​依​...
  • Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [book-rpc,book-api] are excluded from annotation processing 解决方式:
  • maven项目多模块相互调用方法

    千次阅读 2021-06-10 14:29:28
    maven项目多模块相互调用方法问题背景解决方法方法1方法2 问题背景 maven项目包括多个子模块,类似下图: 现在【web】模块某个类想要调用【service】模块的某个类的某个方法。 如果直接通过@Autowired注入【service...
  • 1. maven打包 1.1 pom、jar、war pom:用在父级工程或聚合工程中,用来做jar包的版本控制,必须指明这聚合工程的打包方式为pom。 <packaging>pom</packaging> 子module: // 1、jar方式 <...
  • 项目有多个模块,然后把一些公共的抽取出来(比如说实体类,Service等)单独为一个模块,然后再需要用到的模块中引入就行了,运行是没有问题的,然而打 jar 包的时候 maven 会一直提示找不到依赖的那个模块,从而...
  • 就以快速构建Dubbo项目为例,需要创建具有三个模块的项目:生产者Producer、消费者Consumer以及公用的API接口依赖,并且需要将API依赖到生产者和消费者模块中。 1. 创建API接口 2. 创建生产者Provider模块 ...
  • 需求:idea上搭建maven项目 moduleA,moduleA 依赖moduleB 和 moduleC,moduleC 依赖moduleB .其中moduleB 和moduleC中只有serve层到数据库层的文件方式一,moduleA引用moduleB和moduleC的jar形式。...
  • maven项目互相之间存在依赖,在idea中可以正常运行,但是打包时会出现在仓库中检索不到依赖的问题; 为了描述方便,我们将父级工程叫作parent,子包分别为childa,childb,childc,其中chlidb和childc依赖于chlida解决...
  • 原文出处:http://hck.iteye.com/blog/1728329很​多​时...​这​对​于​使​用​Maven的​用​户​是​比​较​痛​苦​的​,因​为​出​现​模​块​之​间​相​互​依​赖​的​话​在​构​建​的​时​候...
  • maven模块之间的互相依赖问题

    千次阅读 2020-02-25 18:48:34
    处理模块之间的依赖关系(模块之间不能有循环依赖) Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [basic_core,basic_util,crm_common,crm_...
  • 最近掉进maven的坑就是在多模块maven项目中,如果我们每项目之间互相依赖,如果跟项目中设置了denpendency变量版本号就会导致隔代模块的dependency无法找到。出现以下的error。 <dependency> <...
  • maven模块依赖冲突问题汇总记录

    千次阅读 2020-12-20 12:22:32
    目录前言:今天学习和总结了...一句话概括就是:一模块作为版本控制多个子模块,子模块负责接入到父模块当中作为整个项目的过程。多Module管理项目的几种方式:按照单模块拆分为多个子模块,比如将MVC三层架构拆...
  • maven项目子模块相互引用无效

    万次阅读 2018-09-17 15:36:36
    搭建maven项目的时候,dao模块引用beans模块的pojo,发现没有效果 dao模块是新建的模块,都没配置什么怎么会引用不到 叫大佬过来演示排错了一波 ...1.子模块依赖重复,因为之前创建了几次dao,IDEA父项目自动...
  • 想在 eclipse 中创建一拥有子模块maven 工程,因为在实际项目中用到的就是多模块工程,原谅我不知道这工程是如何创建的,因为以前没有接触过,在这里记录下创建工程。 创建父 maven 工程: 打开 eclipse...
  • 父项目是A,两个子项目是B和C,B中想引入C,会发现报错了,原因是我们install的顺序有问题 我建议: 先把你添加的其他依赖全部去掉,只剩下单纯的B-A,B-C的依赖,然后先 maven install父项目,把父子关系建立起来...
  • 现研发经理要求将所有工程进行整合和规范化,所以抽出一parent父工程,base基础模块(包含一些公用的实体类和工具类等),以及其他子模块(Module A、 Module B …)。Module A 以及Module B工程都需要依赖base工程。 ...
  • 很多时候随着项目的膨胀,模块会越来越多,如果设计上 稍有不慎就会出现模块...下图描述了三个Maven模块相互依赖的场景:图中模块C依赖模块B,模块B依赖模块A,而模块A又依赖模块C,这样就出现了相互依赖情况...
  • maven父子结构相互依赖所遇到的坑

    千次阅读 2021-02-11 21:16:33
    场景:因为之前用到的是,基于springboot框架所搭建的maven工程,而且都是相互独立的。现研发经理要求将所有工程进行整合和规范化,所以抽出一parent父工程,base基础模块(包含一些公用的实体类和工具类等),以及其他子...
  • 最近项目上使用的是idea ide的多模块话,需要模块之间的依赖,比如说系统管理模块依赖授权模块进行认证和授权,而认证授权模块需要依赖系统管理模块进行,然后,我就开始相互依赖,然后出现这样的问题: “Could ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,666
精华内容 23,866
关键字:

maven两个模块相互依赖