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,于是想能够也用命令行实现…创建...
