您的位置:首页 > 其它

Maven简单使用总结

2018-02-15 15:34 211 查看
版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~

http://blog.csdn.net/xiaoduan_/article/details/79328422

Maven简单使用总结

  学习Hadoop与Spark过程中需要用Maven建立项目,学了一点,这里记录一下。

Maven项目典型目录结构

src——————————————————————–源代码

main

java

package

test—————————————————-放置测试用例

java

package

resources

pom.xml ———————————————用于管理项目依赖和构建过程

Maven简单命令

mvn -v 查看maven的版本

mvn -compile 编译项目

mvn -test 测试

mvn -package 打包

mvn -client 删除target 目录

mvn -install 按照jar包到本地仓库

创建目录的方式(使用archetype自动创建)

archetype : generate 按照提示进行选择

archetype : generate

-DgroupId=组织名、公司域名的反写+项目名

-DartfactId=项目名-模块名

-Dversion=版本号

-Dpackage=代码所存在的包名

  很多插件目标的参数都支持从命令行配置,用户可以在Maven命令中直接使用-D参数,并伴随一个参数键=参数值的形式来配置插件目标参数

Maven坐标概念

  为了快速定位一个项目,Maven定义了这样一组规则:世界上任何一个构件都可以使用Maven坐标唯一标识,Maven的坐标元素包括groupId、artifactId、version、packaging、classifier

1. groupId

定义当前Maven项目隶属的实际项目

artifactId

该元素定义实际项目中的一个模块,推荐的做法是使用实际项目名称作为artifactId的前缀。例如nexus-indexer-2.0.0

version

该元素定义Maven项目当前所处的版本

packaging

该元素定义了Maven项目的打包方式。打包方式通常与所生成构建的文件名的扩展名对应。packaging未定义的时候的默认值是jar

classifier

该元素用来帮助定义构建输出的一些附属构构件。附属构件与主构件对应。注意,不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的构件帮助生成。

  上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的(默认是jar),classifier是不能直接定义的

Maven生命周期

三套生命周期

  Maven拥有三套相互独立的生命周期他们分别是clean、default和site。clean是生命周期的目的是清理项目,default生命周期的目的是构建项目,而site生命周期是建立项目站点

  以clean生命周期为例,它包含的阶段有pre-clean、clean和post-clean。当用户调用pre-clean的时候只有pre-clean阶段执行,当用户调用clean的时候,pre-clean和clean会得以按照顺序执行,当用户调用post-clean的时候,pre-clean,clean,post-clean会按照顺序执行

  较之与生命周期阶段前后的依赖关系,三套生命周期(clean,default,site)本身相互独立,用户可以仅仅调用clean生命周期的某个阶段而不会对其他生命周期有任何影响

claen生命周期

clean是生命周期的目的是为了清理项目,它包含了三个阶段

1. pre-clean 执行一些清理前需要完成的工作

2. clean 清理上一次构建生成的文件

3. post-clean 执行一些清理后需要完成的工作

default生命周期

default生命周期定义了真正构建时所需要执行的所有步骤,他是所有生命周期中最核心的部分,其包括的阶段如下。

validate

initialize

generate-sources

process-source 处理项目主源文件。一般来说是对src/main/resources目录内容进行变量替换等工作,赋值到项目输出的主classpath目录中

generate-source

process-resource

compile 编译项目的主源码。一般来说,是编译src/main/java目录下的JAVA文件到项目输出的主classpath目录中

process-classes

generate-test-sources

process-test-sources 处理项目测试资源文件

generate-test-resource

test-compile 编译项目的测试代码

process-test-classes

test 使用单元测试框架运行测试,测试代码不会被打包或者部署

prepare-package

package 接受编译好的代码,打包成可以发布的格式如 JAR

pre-integration-test

integration-test

verify

install 将包安装到Maven的本地仓库,供本地其他Maven项目使用

deploy将最终的包复制到远程仓库,供其他开发人员和Maven项目使用

site生命周期

site生命周期的目的是建立和发布项目的站点,maven能够给予pom所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息

pre-site 执行一些在生成项目站点前需要完成的工作

site 生成项目站点文档

post-site 执行一些在生成项目站点之后需要完成的工作

site-deploy 将生成的项目站点发布到服务器上

命令行与生命周期

  从命令行执行Maven任务的最主要方式就是调用Maven的生命周期阶段。需要注意的是各各生命周期之间相互独立,而同一个生命周期内具有前后依赖的关系

$mvn claen
:该命令调用clean生命周期的clean阶段。实际执行阶段为clean生命周期的pre-clean和clean阶段

$mvn test
:该命令执行的是default生命周期的test阶段。实际执行阶段为default生命周期的validate一直到test的所有阶段。这也解释了为什么执行测试的时候项目代码能够自动编译

$mvn clean install
:该命令调用clean生命周期的clean阶段和default生命周期的install阶段。实际执行为依次执行各各生周期开头到clean和install阶段的中间所有阶段。该命令结合了两个生命周期。在执行真正项目构建之前清理项目是一个很好的实践。

$mvn clean deploy site-deploy
:该命令调用clean生命周期的clean阶段,default生命周期中的deploy阶段以及site生命周期的site-deploy阶段。实际执行规律同上。

pom.xml文件例子

下面是一个添加sparkstreaming依赖的项目例子

<project 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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.imooc.spark</groupId>
<artifactId>sparktrain</artifactId>
<version>1.0</version>
<inceptionYear>2008</inceptionYear>
<!--在这里统一设定依赖的版本号,便于统一管理-->
<properties>
<scala.version>2.11.8</scala.version>
<kafka.version>0.9.0.0</kafka.version>
<spark.version>2.2.0</spark.version>
<hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
<hbase.version>1.2.0-cdh5.7.0</hbase.version>
</properties>

<repositories>
<!--添加cloudera仓库链接-->
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
</repository>

<repository>
<id>scala-tools.org</id>
<name>Scala-Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</repository>

</repositories>

<pluginRepositories>
<pluginRepository>
<id>scala-tools.org</id>
<name>Scala-Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</pluginRepository>
</pluginRepositories>

<!--各种依赖-->
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
//这里使用引用的方式语法格式是${xxx.version}
<version>${scala.version}</version>
</dependency>
<!--kafka 依赖-->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>${kafka.version}</version>
</dependency>
<!--hadoop-client依赖-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
<!--hbase-client依赖-->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>${hbase.version}</version>
</dependency>
<!--hbase-server 依赖-->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>${hbase.version}</version>
</dependency>
<!--sparkStreaming 依赖 这里的2.11是指的编译的scale的版本 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<!--Spark Streaming整合Flume 依赖-->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-flume_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<!--spark SQL-->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<!--jar 包冲突-->
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-scala_2.11</artifactId>
<version>2.6.5</version>
</dependency>

<!-- https://mvnrepository.com/artifact/net.jpountz.lz4/lz4 -->
<dependency>
<groupId>net.jpountz.lz4</groupId>
<artifactId>lz4</artifactId>
<version>1.3.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
</dependencies>

<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>

<!--添加各种插件-->
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
<args>
<arg>-target:jvm-1.5</arg>
</args>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Maven