使用Maven进行编译

 正如在介绍的文章中所提到的,要完成预定的任务,你是在一个很高的层次,使用声明的方式来告知Maven如何做的。在你开始编译前,注意在这个简单命令的背后所显示的四个Maven基础工作步骤:

  • 通过配置进行约定
  • 重用构建逻辑
  • 声明式执行
  • 有序的依赖组织

这些准则存在于Maven的方方面面,但下面对简单编译命令的分析,向你展示了这四个准则的工作情况,并明确它在简化开发中所起的重要作用。

 

切换大<my-app>目录,<my-app>是my-app项目的基础目录,使用${basedir}表示。下面,你将使用如下命令编译你的源代码:

 

C:/mvnbook/my-app> mvn compile

 

执行完成后,你将得到和如下类似的输出:

 

  1. [INFO--------------------------------------------------------------------
  2. [INFO] Building Maven Quick Start Archetype
  3. [INFO] task-segment: [compile]
  4. [INFO]-------------------------------------------------------------------
  5. [INFO] artifact org.apache.maven.plugins:maven-resources-plugin: checking for
  6. updates from central
  7. ...
  8. [INFO] artifact org.apache.maven.plugins:maven-compiler-plugin: checking for
  9. updates from central
  10. ...
  11. [INFO] [resources:resources]
  12. ...
  13. [INFO] [compiler:compile]
  14. Compiling 1 source file to c:/mvnbook/my-app/target/classes
  15. [INFO]-------------------------------------------------------------------
  16. [INFO] BUILD SUCCESSFUL
  17. [INFO]-------------------------------------------------------------------
  18. [INFO] Total time: 3 minutes 54 seconds
  19. [INFO] Finished at: Fri Sep 23 15:48:34 GMT-05:00 2005
  20. [INFO] Final Memory: 2M/6M
  21. [INFO]-------------------------------------------------------------------

 

现在让我们分析下究竟发生了什么,并且看下在看起来很简单的命令下,之前提到的四个基础工作是如何进行的。

 

Maven是如何知道从哪里找到要编译的源文件?并且Maven如何知道将编译好的类文件放到哪里?这里就是由Mave基础工作之一“通过配置进行约定”所解决的问题。一般情况下,源文件放在src/main/java路径下,这种默认设置(虽然在上面的POM文件中并没看到)是从Super POM继承来的。即使最简单的POM也知道源文件的默认位置。这意味着如果你的源文件存在于默认位置的话,你不需要在POM里面明确设置这些位置。当然,你也可以覆盖默认的位置,但并不推荐这样做。这同样也适用于编译后的类文件的默认位置是target/classes。

 

究竟是什么编译了应用程序的源文件?这就是Maven的基础工作之二——“重用构建逻辑”的功劳了。默认设置里的标准编译器插件,被用来编译应用程序的源文件。同样的构建逻辑可以在任务数量的项目上通用。

 

虽然你现在知道了编译器插件被用来编译应用程序的源文件,那么Maven是如何决定去使用这个编译器的那?你可能猜测存在一个后台进程映射了一个简单命令到某个插件。实际上,存在一个名为默认的build life cycle

 

那么,现在你知道了Maven如何去找到应用程序源代码,Maven使用什么去编译源代码,并且如何去调用编译器插件。下一个问题就是,Maven从哪里得到的这个编译器插件?毕竟,在Maven安装过程中,你看不到这个编译器插件,因为它不随Maven安装包一起发布,相反,Maven会在用到他们的时候再下载。

 

当你首次执行这个命令(或其他命令)的时候,Maven会下载所有插件以及相关的文件。如果从一个简洁的Maven安装开始,可能需要一段时间(对于前面提到的来说,宽带下载的话可能需要4分钟左右)。下次你再执行同一个命令的时候,因为Maven已经有了它所需要的,就不会再需要下载什么了,因此,Maven会比以前更快的执行此命令。

 

从输出你可以看出来,编译后的类文件被放在了target/classes中,这是在默认设置中定义的。如果你是一个仔细的观察者的话,你会发现使用一般的约定会让你的POM非常小,没有了告知Maven到哪里去找源代码,或输出文件放在哪的必要。使用默认的配置,你往往可以事半功倍。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值