maven学习笔记

maven
1.maven项目目录结构:
src
    -main
        -java
            -package
    -test
        -java
            -package
    resources
src 源代码目录
resources 存放资源文件


2.pom.xml结构
  <modelVersion> 是maven的版本
  <groupId> 是项目的包名
  <artifactId> 是模块名
  <version> 当前项目的版本号

  <dependencies> 依赖哪些包
    <dependency>依赖的包
      <groupId>包名
      <artifactId>模块名
      <version>包版本

pom.xml保存在项目根目录,然后打开命令行去到项目所在根目录执行mvn compile命令,进行编译。
mvn test命令可以测试是否部署成功
mvn package打包当前项目jar

3.mvn compile 编译  
mvn test 运行test包下面的代码  生成target文件夹 其中classes中为编译后的字节码文件
mvn package 给整个项目打包,在target目录下生成jar文件(文件类型可用pom中的packaging标签自己定义

4.测试类:
import org.junit.*;
@Test

5.maven 的常用的构建命令
mvn -v
    用来查询maven的版本号、java的版本号以及系统的版本号
mvn compile
    用来编译当前目录下的项目(将会去pom中查找依赖,若没有,会联网到中央库搜索),BUILD SUCCESS 代表成功
mvn tset
    运行测试类
mvn package
    在target目录下,生成当前项目的Jar包(打包)
mvn clean
    清理项目,执行此命令将会删除target目录
mvn install
    将当前目录下所在的项目安装到本地仓库中,可以供其他Maven项目依赖使用
    (要在使用该maven项目的其他maven项目的pom.xml文件中配置引用该项目,
    将该maven项目中的下面三个配置复制到其他maven项目中供其他项目当做jar引用他
     <groupId> 是项目的包名 <artifactId> 是模块名 <version> 当前项目的版本号)

6.自动创建目录骨架的两种方式
1.mvn archetype:generate 根据提示分步创建
2.mvn archetype generate -DgroupId=组织名,公司网址的反写+项目名  
                         -DartifactId=项目名-模块名
                         -Dversion=版本号
                         -Dpackage=代码所存在的包名

7.maven中的坐标和仓库
坐标:<groupId> 是项目的包名
     <artifactId> 是模块名
     <version> 当前项目的版本号
	groupId , artifactId , version 确定地址。
仓库:本地仓库和远程仓库
镜像仓库:
	1>. 更改本地仓库位置 : settings.xml中添加localRepository标签
	2>. 组合命令: mvn clean compile
	3>. settings.xml中配置mirror repositories,但是注意一旦配置了mirror,maven就会默认从mirror仓库取包而远程主仓库就不可使用

8.在eclipse中安装maven插件以及创建maven项目:
	①在eclipse4.0及MyEclipse中就不需要安装maven插件,在window--preference中可以查看是否有maven插件,
	 没有的话就需要安装Maven插件,直接复制Maven插件到eclipse安装目录中的dropins中,然后修改eclipse.ini,
	 在这个文件里的512m后面添加-vm,换行,再添加jdk/bin/javaw.exe保存。
	②eclipse是默认运行在jre之上的而maven需要jdk的支持,需要tools.jar在jdk/lib目录中,所以修
	 改eclipse的JRE,java---Installed JREs--ADD--Next--把本地JDK的目录放到JRE home中,并设
	 置Dmaven.multiModuleProjectDirectory=$M2_HOME--最后勾选JDK
	③更改maven本地的配置Installactions---ADD---把本地的maven目录放进去
	④修改setting的路径

	会出现的问题:
	1、如果版本不匹配 则mvn -v查看maven的jdk版本,然后在eclipse中配置当前使用的jdk
	2、run as-->Maven build...-->在goals中compile(可以在此处使用其他的命令,如:package)---》run
	若报-Dmaven.multiModuleProjectDirectory错误,则在选项-->java--》installed JRES 中设置jdk的参数,
	添加上“-Dmaven.multiModuleProjectDirectory=$M2_HOME”

9.完整的项目构建过程包括:
	clean、compile、test、package、validate、install
	清理、编译、测试、打包、集成测试、验证、部署
	注:运行package命令时,compile以及test会自动运行
	
	maven相互独立的三个生命周期:
	1.clean      清理项目
	    1> pre-clean  执行清理前的工作
	    2> clean      清理上一次构建生成的所有文件
	    3> post-clean 执行清理后的文件
	2.default    构建项目(最核心)
	    compile  test  package  install
	3.site       生成项目站点(根据pom中的信息自动生成站点)
	    pre-site      生成站点前的工作
	    site          生成项目的站点文档
	    post-site     生成站点后的工作
	    site-deploy   发布生成的站点到服务器上

10.maven中pom.xml解析
pom.xml文件是maven核心管理文件,用于项目描述,组织管理,依赖管理和构建信息的管理	
maven的pom.xml各标签所代表的内容:
	<modelVersion>  : 制定了当前pom的版本号(固定且必须)
	<project>	: 根标签,约束信息
	<modelVersion>	: 指定当前pom的版本,必须元素
	<groupId>	: 反写的公司网址+项目名
	<artifactId>	: 项目名+模块名
	<version>	: 0.0.0snapshot
		第一个0	: 表示大版本号
		第二个0 : 表示分支版本号
		第三个0	: 表示小版本号

		snapshop: 快照
		alpha	: 内部测试
		beta	: 公测
		Release	: 稳定
		GA	: 正式发布
	<packaging>	: 打包方式,默认为jar(war zip pom)

	<name>		: 项目描述名
	<url>		: 项目地址
	<description>	: 项目描述
	<developers>	: 
	<licenses>	: 许可信息
	<organization>	:

	<dependencies>	: 依赖列表
		<dependency>
			<groupId>	:
			<artifactId>	:
			<version>	:

			<type>		:
			<scope>		: 依赖范围
			<optional>	: 设置依赖是否可选(true/false)

			<exclusions>	: 排除依赖传递列表
				<exclusion>
	
	<dependencyManage>: 依赖的管理
		<dependencies>
			<dependency>
	<build>
		<plugins>: 插件列表
			<groupId>
			<artifactId>
			<version>
	<parent>	: 用于子模块中对于父模块的继承
	<modules>	: 指定多个模块,然后一起编译

11.scope 作用域的值:
	compile :默认,编译,测试,运行均有效;
	provided: 编译,测试; 如:servlet API加载
	runtime: 测试,运行,如:jdbc驱动;
	import:导入的范围有效,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置
	test: 测试(junit的<scope>test</scope>标签表示junit只存在测试的classpath中)
	system:与本机系统相关联,换机子以后可能会出问题,可移植性差(编译、测试时有效)

12.依赖的传递性
clean 清除 package 打包 install 安装带本地仓库 compile 编译
依赖的传递性:需要将父类pom  install到本地仓库中,子类pom在<dependency>中加入父类依赖坐标,即可调用
	在<dependency>中运用<exclusions> <exclusion>来排除所不需要的父类pom

13.依赖冲突时的优先顺序:
1>.短路优先
  有以下两条依赖:A->B->C->X(JAR)和A->D->X(JAR),那么A-D-X这条优先解析
2>.先声明先优先
  如果路径长度相同,则谁先声明(在pom中出现的先后顺序),先解析谁

14.继承和聚合
继承:多次使用到的依赖,比如:单元测试,没有必要在所有的项目中都引用一下,此时就可以采用继承的方式来实现,先来一个父级的POM.XML然后再继承此POM.XML。
1). packaging 改为pom。
2). dependencyManagement 中并不提取依赖,只进行统一管理。
3). property中定义了junit版本号,之后可以引用。
4). 父类parent中的main和test没有意义,可以删除。

父类pom:
<dependencyManagement>
   <dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>${junit.version}</version>
   </dependency>
 </dependencies>
</dependencyManagement>

子类pom:
<parent>
 <groupId>com.hongxin</groupId>
 <artifactId>hongxin-parent</artifactId>
 <version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
   </dependency>
</dependencies>

聚合:如果项目D依赖项目C,项目C依赖项目B,项目B依赖项目A,我们需要一个个安装这项项目,在Maven中有一种方式可以将多个项目一次性安装,这就是聚合的概念。简单讲就是,需要人工多次操作的,只要Maven能理解,一次性告诉他,他就能帮我们做这件单调烦人的事情了。——使用<modules></modules>这个标签。

<modules>
   <module>../hongxin-bege</module>
   <module>../hongxin-nange</module>
   <module>../hongxin-shanji</module>
</modules>

EnMAP-Box是一款高效、便捷的遥感图像处理软件,其独特之处在于它是一个免安装的应用程序,用户可以直接运行而无需进行复杂的安装过程。这款工具主要用于处理和分析来自各种遥感传感器的数据,如EnMAP(环境多波段光谱成像仪)和其他同类设备获取的高光谱图像。EnMAP-Box的设计目标是为科研人员和实践工作者提供一个直观、易用的平台,以执行复杂的遥感数据处理任务。 在使用EnMAP-Box之前,一个关键的前提条件是需要有一个兼容的IDL(Interactive Data Language)环境。IDL是一种强大的编程语言,特别适用于科学数据的处理和可视化,尤其是在地球科学和遥感领域。它提供了丰富的库函数,支持对多维数组操作,这使得它成为处理遥感图像的理想选择。EnMAP-Box是基于IDL开发的,因此,用户在使用该软件之前需要确保已经正确配置了IDL环境。 EnMAP-Box的主要功能包括: 1. 数据导入:能够读取多种遥感数据格式,如ENVI、HDF、GeoTIFF等,方便用户将不同来源的遥感图像导入到软件中进行分析。 2. 预处理:提供辐射校正、大气校正、几何校正等功能,用于改善原始图像的质量,确保后续分析的准确性。 3. 分光分析:支持高光谱图像的光谱特征提取,如光谱指数计算、光谱端元分离等,有助于识别地物类型和监测环境变化。 4. 图像分类:通过监督或非监督方法进行图像分类,可以自动或半自动地将图像像素划分为不同的地物类别。 5. 时间序列分析:对于多时相遥感数据,EnMAP-Box能进行时间序列分析,揭示地表动态变化趋势。 6. 结果导出与可视化:处理后的结果可以导出为各种格式,同时软件内置了图像显示和地图投影功能,帮助用户直观地查看和理解处理结果。 7. 自定义脚本:利用IDL的强大功能,用户可以编写自定义脚本来实现特定的遥感处理需求,增强了软件的灵活性和可扩展性。 在使用EnMAP-Box的过程中,用户可能会遇到一些挑战,例如对IDL编程语言不熟悉,或者对遥感数据处理的基本概念和方法缺乏了解。这时,可以通过查阅软件自带的文档、教程,以及在线资源来提升技能。同时,积极参与相关的学习社区和论坛,与其他用户交流经验,可以帮助解决遇到的问题。 EnMAP-Box作为一款基于IDL的遥感图像处理工具,为遥感数据分析提供了便利,但需要用户具备一定的IDL基础和遥感知识。通过熟练掌握EnMAP-Box,用户可以高效地处理和解析遥感数据,揭示地表信息,为环境保护、资源管理等领域提供科学支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值