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 1.8 1.8 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 1.8 1.8 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 1.8 1.8 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 1.8 1.8 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 1.8 1.8 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且相互调用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
idea快捷键一览表(Intellij IDEA main方法快捷键是什么)
IntellijIDEAmain方法快捷键是什么?键入sout,然后按tab键。提示:如果你不如果你不知道快捷键,你可以查看...
-
IDEA中怎么添加jar包
这篇文章给大家介绍IDEA中怎么添加jar包,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.首先,打开In...
-
如何解决IDEA启动tomcat端口的问题
这篇文章主要介绍了如何解决IDEA启动tomcat端口的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后...
-
IDEA编译乱码Build(Output提示信息乱码)
IDEA编译乱码Build,Output提示信息乱码目录问题说明:IDEA编译的时候乱码,BuildOutput提示信息乱码�...
-
idea向System.getenv()添加系统环境变量的操作
idea向System.getenv()添加系统环境变量的操作idea如何设置系统环境变量背景最近在接入阿里云的短信服务,在使...
-
idea中怎么解决maven包冲突问题
idea中怎么解决maven包冲突问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望...
-
IntelliJ IDEA中怎么新建一个Java class项目
IntelliJIDEA中怎么新建一个Javaclass项目,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和...
-
怎么在IDEA中修改内存大小
怎么在IDEA中修改内存大小,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单...
-
idea中怎么导入ssm项目
这篇文章将为大家详细讲解有关idea中怎么导入ssm项目,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对...
-
MAC下基于maven使用IDEA走读TestNG源码解析
之前用Python执行程序都是pythonxxx.py,最近在使用Java技术栈的TestNG,于是想能够也用命令行实现…创建...