intellij idea如何打开多个maven的module且相互调用-亚博电竞手机版
小编给大家分享一下intellij idea如何打开多个maven的module且相互调用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
###1、需求
1、intellij idea打开多个项目2、每个同学开发一个项目,相互之前独立不影响3、通过一个入口可以调用所有项目类、方法、属性,达到同时开发且检测代码4、dependency只需要写一份,其余项目不用写,便可全部依赖
###2、注意事项(非常重要)
6个坑:
1、
项目中所有的groupid要一样
2、避免循环依赖,导致程序报错
3、
打包的服务器运行时候需要provided,本机调试的时候,需要注释在一个maven项目中,如果存在编译需要而发布不需要的jar包,可以用scope标签,值设为provided
4、项目、module建好之后需要添加scala的框架支持
5、在yhproject中,可以统一对所有的module进行清理、编译、打包
6、要运行依赖中的module,则必须要将module中的jar包,打到maven中,需要使用install
下面,是我将所有module中的jar打到maven中的路径:
###3、建立project和建立module
1、只需要建立一个项目,其他项目由module建立,所有module且放在项目中。2、本文项目为yhproject,其余都为module,分别是:mainentrance、yhutils、yhapp、yhweb、yhgame
项目建立步鄹:
module建立步鄹:
项目、所有module、部分module代码展示:
###4、项目之前的依赖关系
###5、代码展示
mainentrance
package com.yh.bi.dag
packagecom.yh.bi.dag /** *createdbyyuhuion2017/2/10. */ importjava.time.{duration,localdate} importcom.yh.bi._ importcom.yh.bi.{userapp,usergame,userweb} importorg.slf4j.loggerfactory importscala.collection.immutable.{listmap,listset} /** *createdbyyuhuion2016/8/25. *task-->node-->dag-->dagexecutor */ caseclassnode[t](task:t,parent:t*){ overridedeftostring:string={ s"$task(${parent.mkstring(",")})" } } caseclassdag[t](nodes:node[t]*) caseclassdagexecutor[t](dag:dag[t]){ privatevallog=loggerfactory.getlogger(this.getclass) privateval_nodes:map[t,seq[t]]=dag.nodes.map(node=>(node.task,node.parent.filter(_!=null))).tomap privatevar_pending:set[t]=listset() privatevar_fails=listmap[t,string]() privatevar_success=seq[t]() //判断node的task节点的父节点运行状态(flase,true) privatedefgetpending:option[t]={ _pending.find{name=> valparents=_nodes(name) !parents.exists(name=>!_success.contains(name)) } } privatedeffail(name:t,message:string):unit={ _pending-=name _fails =name->message for(child<-_pending.filter(child=>_nodes(child).contains(name))){ fail(child,s"依赖的任务无法执行:$name") } } privatedefsuccess(name:t):unit={ _pending-=name _success=_success: name } defexecute(func:t=>unit):unit={ _pending=_nodes.keyset _fails=listmap() _success=seq() varrunning=true while(running){ valtaskopt=getpending if(taskopt.nonempty){ valtask=taskopt.get valstartmills=system.currenttimemillis() log.info("starttask{}",task) try{ println("=============") func(task)//执行executor方法 println(" ") valtime=duration.ofmillis(system.currenttimemillis()-startmills) log.info(s"endtask$tasktime=$time") success(task) }catch{ casee:throwable=>fail(task,e.getmessage) log.error(e.getmessage,e) log.info(s"failtask$task") } }else{ running=false } } for(name<-_success){ log.info(s"successtask:$name") } for(name<-_fails){ log.info(s"failtask:${name._1}-${name._2}") } } } objectdag{ valallsdkdag=newdag[task]( node(userapp), node(usergame), node(userweb) ) defmain(args:array[string]):unit={ dagexecutor(allsdkdag).execute{task=>task.executor("appkey":string,localdate.now(),localdate.now())} } }
yhutils
packagecom.yh.bi /** *createdbyyuhuion2017/2/10. */ importjava.time.localdate importorg.apache.spark.sql.sqlcontext importorg.slf4j.loggerfactory abstractclassexecutorextendstaskwithsqlcontextaware{ overridedefrun(appkey:string,startday:localdate,endday:localdate)={} } traitsqlcontextaware{ implicitvarctx:sqlcontext=_ } abstractclasstask{ protectedvallog=loggerfactory.getlogger(this.getclass) defexecutor(appkey:string,startday:localdate,endday:localdate):unit defrun(appkey:string,startday:localdate,endday:localdate):unit={ executor(appkey,startday,endday) } }
yhapp
packagecom.yh.bi /** *createdbyyuhuion2017/2/10. */ importjava.time.localdate objectuserappextendsexecutor{ overridedefexecutor(appkey:string,startday:localdate,endday:localdate):unit={ println(" 我的userapp的执行过程 ") } }
yhweb
packagecom.yh.bi importjava.time.localdate objectuserwebextendsexecutor{ overridedefexecutor(appkey:string,startday:localdate,endday:localdate):unit={ println(" 我的userweb的执行过程 ") } }
yhgame
packagecom.yh.bi /** *createdbyyuhuion2017/2/10. */ importjava.time.localdate objectusergameextendsexecutor{ overridedefexecutor(appkey:string,startday:localdate,endday:localdate):unit={ println(" 我的usergame的执行过程 ") } }
###6、项目中pom依赖展示
yhproject中pom文件展示:
4.0.0 com.yh.bi yhproject pom 1.0 mainentrance yhapp yhweb yhgame yhutils
mainentrance中pom文件展示:
4.0.0 mainentrance com.yh.bi 1.0 yhutils com.yh.bi 1.0 yhapp com.yh.bi 1.0 yhgame com.yh.bi 1.0 yhweb com.yh.bi 1.0 org.apache.maven.plugins maven-compiler-plugin org.apache.maven.plugins maven-shade-plugin 2.4 *:* **/log4j2.* meta-inf/*.sf meta-inf/*.dsa meta-inf/*.rsa package shade ${project.build.directory}/${project.artifactid}.jar src/main/scala ${basedir}/src/main/resources **/*
yhutils中pom文件展示:
yhproject com.yh.bi 1.0 4.0.0 yhutils org.apache.spark spark-hive_2.11 1.6.1 org.apache.maven.plugins maven-compiler-plugin org.apache.maven.plugins maven-shade-plugin 2.4 *:* **/log4j2.* meta-inf/*.sf meta-inf/*.dsa meta-inf/*.rsa package shade ${project.build.directory}/${project.artifactid}.jar src/main/scala ${basedir}/src/main/resources **/*
yhapp中pom文件展示:
4.0.0 com.yh.bi yhapp 1.0 yhutils com.yh.bi 1.0 provided org.apache.maven.plugins maven-compiler-plugin org.apache.maven.plugins maven-shade-plugin 2.4 *:* **/log4j2.* meta-inf/*.sf meta-inf/*.dsa meta-inf/*.rsa package shade ${project.build.directory}/${project.artifactid}.jar src/main/scala ${basedir}/src/main/resources **/*
yhweb中pom文件展示:
4.0.0 com.yh.bi yhweb 1.0 yhutils com.yh.bi 1.0 provided org.apache.maven.plugins maven-compiler-plugin org.apache.maven.plugins maven-shade-plugin 2.4 *:* **/log4j2.* meta-inf/*.sf meta-inf/*.dsa meta-inf/*.rsa package shade ${project.build.directory}/${project.artifactid}.jar src/main/scala ${basedir}/src/main/resources **/*
yhgame中pom文件展示:
4.0.0 com.yh.bi yhgame 1.0 yhutils com.yh.bi 1.0 provided org.apache.maven.plugins maven-compiler-plugin org.apache.maven.plugins maven-shade-plugin 2.4 *:* **/log4j2.* meta-inf/*.sf meta-inf/*.dsa meta-inf/*.rsa package shade ${project.build.directory}/${project.artifactid}.jar src/main/scala ${basedir}/src/main/resources **/*
###7、运行结果展示
注意:我在mainentrance执行dag中的main文件,可以调用且执行了yhutils、yhapp、yhweb、yhgame中的代码
###8、如果建立java 的module
以上是“intellij idea如何打开多个maven的module且相互调用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!