IntelliJ IDEA如何打开多个Maven的module且相互调用

小编给大家分享一下IntelliJ IDEA如何打开多个Maven的module且相互调用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

###1、需求

1、IntelliJ IDEA打开多个项目2、每个同学开发一个项目,相互之前独立不影响3、通过一个入口可以调用所有项目类、方法、属性,达到同时开发且检测代码4、dependency只需要写一份,其余项目不用写,便可全部依赖

###2、注意事项(非常重要)

6个坑:

1、com.yh.bi项目中所有的groupId要一样

2、避免循环依赖,导致程序报错

3、provided打包的服务器运行时候需要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且相互调用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-07-24 22:37:13
分享
海报
176
上一篇:IntelliJ IDEA像Eclipse一样打开多个项目的示例分析 下一篇:css中clear属性的使用方法
目录

    推荐阅读

    忘记密码?

    图形验证码