很多笔记及实例摘录自《Maven权威指南》
依赖范围
compile(编译范围)
compile是默认的范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。
provided(已提供范围)
已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。如servlet-api
runtime(运行时范围)
runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。
test(测试范围)
test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
system(系统范围)
system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的。如tools.jar
关于版本的定义
主版本,次版本,增量版本,和限定版本号
<major version>.<minor version>.<incremental version>-<qualifier>
例如:版本“1.3.5”由一个主版本1,一个次版本3,和一个增量版本5。而一个版本“5”只有主版本5,没有次版本和增量版本。限定版本用来标识里程碑构建:alpha和beta发布,限定版本通过连字符与主版本,次版本或增量版本隔离。例如,版本“1.3-beta-01”有一个主版本1,次版本3,和一个限定版本“beta-01”。
需要对版本号的限定版本进行排序。以版本号“1.2.3-alpha-2”和“1.2.3-alpha-10”为例,这里“alpha-2”对应了第二次alpha构建,而“alpha-10”对应了第十次alpha构建。后者比前者排序靠前,因排序按字符串排
SNAPSHOT 表示项目正处于活动的开发状态,快照版本。很不稳定,它随时可能变化。作为一个默认设置,Maven不会从远程仓库检查SNAPSHOT版本,要依赖于SNAPSHOT版本,用户必须在POM中使用repository和pluginRepository元素显式的开启下载snapshot的功能。
LATEST是指某个特定构件最新的发布版或者快照版(snapshot),最近被部署到某个特定仓库的构件。
RELEASE是指仓库中最后的一个非快照版本。
Maven属性
project.*
可使用该project.*前缀来引用任何在MavenPOM中的值,如果在Maven中引用输出目录,应该使用属性来引用这些目录。
• project.build.sourceDirectory
• project.build.scriptSourceDirectory
• project.build.testSourceDirectory
• project.build.outputDirectory
• project.build.testOutputDirectory
• project.build.directory
sourceDirectory,scriptSourceDirectory,和testSourceDirectory提供了项目源码目录的访问方式。
outputDirectory和testOutputDirectory则能让你访问Maven放置字节码和其它构建输出的目录。
directory引用的目录就是包含上述两个输出目录的父目录。
settings.*
Maven Settings。你使用该settings.*前缀来引用~/.m2/settings.xml文件中Maven Settings的值。如本地仓库的位置,以及由某个特定用户配置的服务器,profile,和镜像。
env.*
环境变量如PATH和M2_HOME可以使用env.*前缀来引用。
env.PATH 包含了Maven运行的当前PATH。该PATH包含了一个用来查找可运行脚本和程序的 目录列表,
env.HOME (在*nix系统中)这个变量指向了用户的home目录。但你更应该使用/home/ hudson,而非这个变量。
env.JAVA_HOME 指向了Java安装目录。它要么指向JDK安装目录,要么或者JRE目录。但你更应该 考虑使用/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre而非这个属性。
env.M2_HOME 指向了Maven2安装目录。
系统属性
任何可以通过System.getProperty()方法获取的属性都可以作为Maven属性被引用。
java.version Java运行环境版本
java.vendor Java运行环境供应商
java.vendor.url Java供应商URL
java.home Java安装目录
java.vm.specification.version Java虚拟机规格说明版本
java.vm.specification.vendor Java虚拟机规格说明供应商
java.vm.specification.name Java虚拟机规格说明名称
java.vm.version Java虚拟机实现版本
java.vm.vendor Java虚拟机实现供应商
java.vm.name Java虚拟机实现名称
java.specification.version Java运行环境规格说明版本
java.specification.vendor Java运行环境规格说明供应商
java.specification.name Java运行环境规格说明名称
java.class.version Java类格式版本号
java.class.path Java类路径
java.ext.dirs 扩展目录的路径
os.name 操作系统名称
os.arch 操作系统架构
os.version 操作系统版本
file.separator 文件分隔符(UNIX上是"/",Windows上是"\")
path.separator 路径分隔符(UNIX上是":",Windows上是";")
line.separator 行分隔符(在UNIX和Windows上都是"\n")
user.name 用户帐户名称
user.home 用户home目录
user.dir 用户当前工作目录
用户定义的属性
<properties>
<hibernate.version>4.1</hibernate.version>
</properties>
<build>
<finalName>content-test</finalName>
</build>
settings.xml
文件可位于两个地方
1.Maven安装目录: $M2_HOME/conf/settings.xml
2.用户特定的Settings文件: ~/.m2/settings.xml
settings.xml中顶层元素的概览
<settings xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
localRepository
该值表示构建系统本地仓库的路径。其默认值为~/.m2/repository
<offline>false</offline>
构建系统需要在离线模式下运行,则为true,默认为false。
settings.xml中的Server配置
<servers>
<server>
<id>server001</id>
<username>my_login</username>
<password>my_password</password>
<privateKey>${usr.home}/.ssh/id_dsa</privateKey>
<passphrase>some_passphrase</passphrase>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration></configuration>
</server>
</servers>
构建生命周期
Maven中有三种标准的生命周期:清理(clean),默认(default)(有时候也称为构建),和站点(site)
mvn clean将调用清理生命周期,它包含了三个生命周期阶段:
pre-clean
clean
post-clean
自定义Clean插件的行为 maven-clean-plugin
默认生命周期 (default) 第一个阶段是validate,最后一个阶段是deploy
validate 验证项目是否正确,以及所有为了完整构建必要 的信息是否可用
generate-sources 生成所有需要包含在编译过程中的源代码
process-sources 处理源代码,比如过滤一些值
generate-resources 生成所有需要包含在打包过程中的资源文件
process-resources 复制并处理资源文件至目标目录,准备打包
compile 编译项目的源代码
process-classes 后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)
generate-test-sources 生成所有包含在测试编译过程中的测试源码
process-test-sources 处理测试源码,比如过滤一些值
generate-test-resources 生成测试需要的资源文件
process-test-resources 复制并处理测试资源文件至测试目标目录
test-compile 编译测试源码至测试目标目录
test 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
prepare-package 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本
package 将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
pre-integration-test 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
integration-test 如果有必要的话,处理包并发布至集成测试可以运行的环境
post-integration-test 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
verify 执行所有检查,验证包是有效的,符合质量规范
install 安装包至本地仓库,以备本地的其它项目作为依赖使用
deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)
站点生命周期 (site)
项目文档和站点生成有一个专有的生命周期,它包含了四个阶段:
1. pre-site
2. site
3. post-site
4. site-deploy
默认绑定到站点生命周期的目标是:
1. site - site:site
2. site-deploy -site:deploy
JAR打包默认的目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar
install install:install
deploy deploy:deploy
POM是最简单的打包类型
它生成的构件只是它本身。没有代码需要测试或者编译,也没有资源需要处理。
package site:attach-descriptor
install install:install
deploy deploy:deploy
EJB打包默认的目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package ejb:ejb
install install:install
deploy deploy:deploy
WAR打包默认的目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package war:war
install install:install
deploy deploy:deploy
大部分生命周期将resources:resources目标绑定到process-resources阶段。process-resources阶段处理资源并将资源复制到输出目录
Compile
大部分生命周期将Compiler插件的compile目标绑定到compile阶段。
compile:compile将会编译src/main/java中的所有内容至target/classes。
Compiler插件调用javac,使用的source设置为1.3,默认target设置为1.1。
<plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins>
覆盖默认的源码和输出目录
<build> <sourceDirectory>src/java</sourceDirectory> <outputDirectory>classes</outputDirectory> </build>
覆盖测试源码和输出的位置
<build> <testSourceDirectory>src-test</testSourceDirectory> <testOutputDirectory>classes-test</testOutputDirectory> </build>
mvn install -Dmaven.test.skip=true
相关推荐
其中包含对以下书籍的知识点摘录:、部分内容由于备战校招期间太忙,没记录笔记子项目内容algorithm 算法练习concurrent 并发笔记design 设计模式笔记experience 收集的常见面试问题http http笔记jvm jvm笔记lambda ...
就是笔记啊,一般是书中或者好的博文里的摘录,稍微整理了一下这样子 :high_voltage: 有用的图片,比如流程图,自己看书当笔记画的“思维导图” 主要笔记一览: . ├── FixException │ ├── Eclipse使用...
`notes.doc`可能包含了读者在阅读过程中所做的笔记、书中的重点摘录或是作者提供的额外解释和补充材料。这样的文档对于复习和理解书中的知识点非常有帮助,它可能涵盖了诸如类与对象、封装、继承、多态等核心概念,...
Qt 采用http通信json解析读取天气
岗位晋升360度调查表.doc
合法辞退员工的N种方式.pptx
大模型、Agent、具身智能及人形机器人学习全路径规划.pdf
华润万家员工手册.doc
招聘需求分析.xls
内容概要:本文详细介绍了基于‘光伏(PV)+蓄电池+负载’架构的双有源桥DC-DC变换器仿真方法及其在Matlab 2021b中的具体实现。首先解析了光伏系统的MPPT控制,通过扰动观察法使光伏板始终处于最大功率点。接着讨论了蓄电池的恒流充放电控制,利用PI控制器确保电池的安全和高效运作。然后阐述了双有源桥DC-DC变换器的闭环控制机制,借助PID控制器维持系统输出电压的稳定性。最后,文章展示了如何在Matlab Simulink环境下构建完整的仿真模型,涵盖各模块间的电气连接与信号交互,为新能源系统的优化提供了理论和技术支持。 适合人群:从事电力电子、新能源系统设计的研究人员和工程师,尤其是那些需要深入了解光伏储能系统工作原理的人群。 使用场景及目标:适用于希望掌握光伏储能系统中关键组件如MPPT、恒流充放电控制及双有源桥DC-DC变换器的设计与仿真的技术人员。目标是在实际工程项目中提高系统的效率和可靠性。 其他说明:文中提供的代码片段和建模思路有助于读者更好地理解和实践相关技术,同时也强调了一些常见的陷阱和调试技巧,帮助避免潜在的问题。
线性代数
内容概要:本文详细介绍了不同类型电机的调速方法,重点探讨了直流电机双闭环调速、永磁同步电机电流滞环闭环调速以及异步电机滞环电流调速。文中不仅提供了每种调速方法的基本原理和技术特点,还附带了相应的代码示例进行辅助解释。此外,文章对永磁同步电机的电流滞环调速与SVPWM调速进行了对比,指出了各自的优劣之处。最后,强调了在实际应用中选择合适调速方案的重要性。 适合人群:从事电机控制系统设计与开发的技术人员,尤其是有一定电机控制基础的研发人员。 使用场景及目标:适用于需要深入了解电机调速机制及其应用场景的专业人士。目标是帮助读者掌握不同电机调速方法的特点,以便在实际工程中做出最优选择。 其他说明:文章通过具体的代码实例展示了调速方法的实际应用,使读者能够更好地理解和实践相关技术。同时提醒读者在实际调试过程中要注意参数设置和硬件条件的影响。
人员晋升推荐表.xls
员工生日关怀方案
内容概要:本文详细介绍了对国际知名大厂的三个逆向ADC电路(SAR ADC、Sigma-Delta ADC和Pipeline ADC)进行深入剖析。作者通过Cadence Virtuoso平台研究了这些电路的标准单元库设计,探讨了各个电路的关键技术和实现细节。对于24bit Sigma-Delta ADC,重点讨论了其调制器部分的时钟相位分配和噪声整形技术;对于16bit SAR ADC,则关注其比较器阵列的独特设计以及动态锁存比较器的应用;而对于14bit Pipeline ADC,着重分析了其级间放大器设计和电荷共享技术。此外,文中还提到了在将这些设计适配到自家工艺过程中遇到的问题及其解决方案,如电容寄生效应、时序约束调整、运放结构优化等。 适合人群:从事模拟集成电路设计的专业人士,尤其是对ADC设计感兴趣的工程师和技术研究人员。 使用场景及目标:帮助读者深入了解高精度ADC的工作原理和设计技巧,掌握逆向工程技术在实际项目中的应用,提高对不同工艺节点下ADC设计的理解和适应能力。 其他说明:文中提供了大量具体的代码片段和仿真命令,便于读者理解和实践。同时,作者分享了许多宝贵的经验教训,强调了在逆向工程中需要注意的技术细节和潜在风险。
内容概要:本文详细介绍了大型立体仓库智能物流系统的构建与优化。该项目涉及一万多个库位、一百多台输送机和八台堆垛机,采用了西门子PLC作为控制核心,通过无线网桥与WCS和WMS系统对接。文章重点讲解了梯形图编程和功能块的应用,如输送机启停控制、堆垛机移动控制、路径规划、无线通讯处理以及异常处理机制。此外,还探讨了设备协同、逻辑优化、任务分配算法和速度曲线规划等方面的技术细节。 适合人群:从事工业自动化、智能仓储系统设计与开发的工程师和技术爱好者。 使用场景及目标:适用于智能仓储系统的设计、实施和维护,旨在提高系统的稳定性、效率和可维护性。 其他说明:文中提供了大量实际项目中的代码示例和调试经验,有助于读者理解和应用相关技术。
新员工月工作总结表.xlsx
内容概要:本文详细介绍了基于西门子S7-1500 PLC的汽车电子零件装配线集成解决方案。主要内容涵盖伺服轴控制、阿特拉斯拧紧枪控制、康耐视视觉检测系统以及HMI界面的设计与实现。文中展示了如何利用SCL语言将多种工业设备(如HMI、伺服电机、六轴机器人等)的功能封装为标准化功能块,从而提高系统的模块化程度和可复用性。同时,还分享了一些实际项目中的调试经验和优化技巧,如通过调整加减速曲线避免机械振动、设置扭矩保持时间和视觉检测的防抖定时器等。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是熟悉PLC编程和工业自动化设备集成的专业人士。 使用场景及目标:适用于汽车制造行业的生产线控制系统设计与实施。主要目标是帮助工程师快速掌握如何使用SCL语言构建高效稳定的PLC控制系统,提升生产效率和产品质量。 其他说明:文中不仅提供了详细的代码示例,还结合具体的应用场景进行了深入剖析,有助于读者更好地理解和应用相关技术。此外,强调了模块化编程的优势,如减少重复劳动、便于维护升级等。
内容概要:本文详细介绍了如何在STM32、AT32和GD32等Cortex-M系列MCU上实现串口IAP(In Application Programming)Bootloader,支持远程升级及RS485升级。主要内容涵盖Bootloader的工作原理、内存分配、通信协议设计、Flash写入操作以及跳转应用程序的关键步骤。文中提供了具体的代码示例,如Bootloader主循环、RS485收发控制、Flash写入、CRC校验等,并分享了多个实战经验和注意事项,确保数据传输的可靠性。 适合人群:从事嵌入式系统开发的技术人员,尤其是对STM32、AT32、GD32等国产MCU有一定了解并希望掌握串口IAP技术的研发人员。 使用场景及目标:适用于需要远程升级固件的嵌入式项目,帮助开发者避免现场升级带来的不便,提高设备维护效率。目标是让读者能够独立实现一个可靠的串口IAP Bootloader,掌握RS485通信和Flash编程的关键技术。 其他说明:文中提到的代码和配置已在GitHub上提供,方便读者下载和实践。同时,作者分享了许多实战经验和常见问题解决方案,有助于减少开发过程中可能出现的问题。
线性代数