从maven查找问题到plexus (1)

本文探讨了在Maven编译过程中如何输出动态文件的思考,详细解析了Maven命令行执行的流程。从mvn.cmd到plexus-classworlds-2.5.2.jar的Launcher类,再到m2.conf的硬核解析,揭示了classworlds中的realm概念。进一步,文章指出plexus-classworlds将控制权交给MavenCli,并在maven-embedder-3.5.0.jar中执行主要逻辑。在Maven执行过程中,发现了类似Spring的IoC容器机制,通过@Requirement和@Component注解进行组件管理。作者计划在后续研究中继续深入探索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想在maven编译过程中输出动态的文件,晚上稍微看了下maven的实现,还没研究完。先记录下来。

maven启动的命令行:
在windows上,mvn=mvn.cmd。
mvn执行的命令行如下:

"C:\Program Files\Java\jdk1.8.0_261\bin\java.exe" 
 -classpath "D:\DataCenter\Program\apache-maven-3.5.0\bin\..\boot\plexus-classworlds-2.5.2.jar"   
 "-Dclassworlds.conf=D:\DataCenter\Program\apache-maven-3.5.0\bin\..\bin\m2.conf"   
 "-Dmaven.home=D:\DataCenter\Program\apache-maven-3.5.0\bin\.."   
 "-Dmaven.multiModuleProjectDirectory=D:\dev\git\demo-app"   
 org.codehaus.plexus.classworlds.launcher.Launcher clean package

主类是:org.codehaus.plexus.classworlds.launcher.Launcher
在 plexus-classworlds-2.5.2.jar 中找到它。
里面有对m2.conf的解析过程。该文件的解析也比较硬核:支持 main is … from/set … defult/[]/load/optionally/import … from 的写法。乍一看还以为是个ini文件。

这里感觉应该是 classworlds 的范围,里面有个realm的概念,感觉像是jar包库的意思。

plexus-classworlds 会在初始化后把控制权交给 2.conf 中的 main 定义的 class: org.apache.maven.cli.MavenCli

在 maven-embedder-3.5.0.jar 中。
入口也是main。

乍一看Jansi还以为是拼音,其实是J + ansi。
在doMain中有一大堆执行过程:

initialize( cliRequest );
cli( cliRequest );
logging( cliRequest );
version( cliRequest );
properties( cliRequest );
localContainer = container( cliRequest );
commands( cliRequest );
configure( cliRequest );
toolchains( cliRequest );
populateRequest( cliRequest );
encryption( cliRequest );
repository( cliRequest );
return execute( cliRequest );

在execute里面才是执行的内容,里面有行:
maven.execute( request );
就是交给maven这个实体了。它在前面执行的这个地方:
maven = container.lookup( Maven.class );
这个看起来是不是像spring。
Maven的实现是在 maven-core-3.5.0.jar 中的 org.apache.maven.DefaultMaven

看到这里,就有@Requirement @Component 的注解,这货完全像spring了,plexus 也是一个IOC容器?

明天再接着看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值