早在某公司实习的时候就听闻过Maven,只是听大神简单的介绍过,自己没有实习做过。之前做Android 的时候主要是用gradle(不过真心不熟),大概有点知道Maven的作用,这次来深圳某公司实习,老板叫用Maven 编译C++,虽然事实证明老板的想法有点错误,不过也基于这个,还是稍微正规的学了一发Maven(当然是自学了,除了C++其他都是自学的)。
Maven简介
Maven其实主要就是解决项目编译和项目依赖的问题,在大型项目中很有优势。
例如你的一个项目中有几十外部依赖包,和你自己写的一些包,如果是不用Maven这种东西的话,你得一个一个包的下载,这样比较效率低下,而且一旦你用的包有更新,你又要重新去下载,可能在小项目中这倒没什么,但是在正规的大项目中,外部包的更新换代对项目还是有很大的影响,如果一个外部包有漏洞,可能给黑客攻击的机会,这个时候就必须得更新包。
所以Maven就应运而生,在Maven中只要在一个pom文件中,做一些配置,就可以自动下载所需要的依赖包到本地仓库,然后多个项目可以共享本地仓库的依赖包。如果依赖包需要更新的时候,只需要改一下版本号,就可以了。而且Maven的pom是每个项目(模块)都会有,这些pom中可以有继承的关系,所以有一些依赖包只要在一个parent里面定义就可以了,而且在子pom中也可以自己覆写父pom的定义。
这里只是简单介绍一下Maven的一些概念,关于安装Maven网络上已经有很多教程了,这里就不重复造轮子了,还有Maven的详细原理,这里就给一些自己学习过程的中一些资料:
Maven 入门详解 http://ifeve.com/maven-1/
Maven Linux上部署项目
http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html
Maven多项目构建
下面介绍一下在网上没有的东东,在Windows上Intellij里面部署一个多项目Maven的过程以及踩过的坑。
注意:这里介绍的多项目是一个大项目下包括多个子项目,本身大项目中的pom是起到配置作用,不生成jar或war文件,运行在Main项目中,Main项目中调用Part1和Part2两个项目中的函数
首先新建一个Maven项目,取名MavenProject生成的时候不要用模板(如果是自己的项目有一定类型可以用模板,这里只是一个教程,所以没有用模板)。然后生成之后删掉scr文件夹。然后再添加三个模块,取名Main,Part1,Part2,groupID继承MavenProject的,artifactID自己写。然后这个时候目录是这样的
然后就可以再main(是main不是Main)文件夹里面的java文件夹里面写代码,但是这个第一个坑来了,如果你点击那个java右键添加,里面没有java class的选项,即使你添加了file,后缀是java,也不行,我找了好久都没找到解决方法,一直以为是配置出问题了,结果这里是IDE的锅,这里要去file -> project structure-->module里面设置一下,这个时候就要一个一个的mark as,然后就可以正常些代码了,这个坑找了好久的问题。
写好代码,如下图
main.java
Part1.java
Part2.java
由于这里是Main要引用到part1和part2中的东西,所以在main的pom里面配置一下依赖,part1和part2中的pom由于并没有依赖,所以用自动生成的就可以了
这样就会引用到这两个库了,可以在右边的一个控制板中看到(那个九十度倒着的M字样,如果是intellij中的),记得刷新一下
然后这个时候点Main的install就可以了,也可以用mvn install的命令
Maven依赖包打包生成
这个时候在main里面的target就会生成一个jar包,然后你一运行就会发现,clssNotFound,因为maven打包默认不会把依赖包打进去,找到不到依赖的part1和part2。所以这里就是第二坑,这里在网上查各种复杂的方法,一堆麻烦,而且我也一直以为不用插件,只需要配置一下就可以了,一直没找到。后来找到一个网站,那个配置方法很简单,不过还是用了插件
在pom加上这段就行了,会下载一个插件,貌似公司的项目把依赖包打进去也是用这个,maven官方出的插件,值得信赖。
这是这段代码的来源:http://lvjun106.iteye.com/blog/1849803
最后当然就是搞定咯,但是花了一下午…….
因为前人,才能更高
1.Maven 入门详解 http://ifeve.com/maven-1/
2.Maven Linux上部署项目 http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html
3.Maven 打包依赖包生成目标文件 http://lvjun106.iteye.com/blog/1849803
4.Maven 编译C/C++插件 http://blog.bigpixel.ro/2012/07/building-cc-applications-with-maven/ (本文中没有提及这个链接,但是这个可以作为用Maven编译C/C++的一个思路,但本人通过查阅其他资料,以及个人理解还是建议,编译C/C++不用该用maven,尽管是Java和C/C++混合编程,编译C/C++可以用GCC,或者makefile更加合适,至于用法可参见本人上一篇博客)
Original url: Access
Created at: 2019-08-13 14:39:35
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论