使用maven来管理java项目

初学maven,简单总结一下学习心得,若有不对的地方,欢迎各位大神给我指正~

总结分为6个部分

  • maven概述
  • maven安装
  • maven项目结构和创建方法
  • maven配置文件settings.xml
  • 项目对象文件pom.xml解析
  • eclipse插件安装

一、maven概述

要用java实现一个后台系统,可能需要涉及很多模块。

web应用服务器、文件服务器、db 等等。 我们要开发这些模块,需要先把他们各自需要依赖的jar包或者项目下载打包好,然后配置到项目的classpath中。

这些应用在运行单元测试pr编译or部署的时候,需要依赖本地的一些配置,比如jdk、web容器等,这样我们将项目分享出去的时候,别人要使用就有一定的配置门槛。

maven可以帮我们完成上述所有的工作,不用我们再手工去完成。、

maven将项目看做一个对象。

maven建立了一个仓库体系,来管理这些项目对象。

maven的仓库分为本地仓库和远程仓库(maven提供的中央仓库)。

我们可以通过maven的命令把自己的项目a放到本地仓库中,如果其他项目b需要依赖项目a,则可以直接在本地仓库中找到。

如果我们的项目依赖一些别人的项目,比如jdbc、mybatis,maven会先根据我们的项目属性在本地仓库中去找,若找不到就去中央仓库中去找。

如下图,箭头表示依赖关系。

maven项目对象的部分基础属性

① 项目坐标

项目坐标用来定位一个项目在仓库中的位置。当项目b依赖项目a或者jdbc时,maven会根据项目坐标属性去从仓库体系中寻找项目,并自动配置到项目依赖中。

② 打包方式。

这个属性决定我们执行maven的package方法后,项目会被打包成什么文件。

③ 项目依赖列表。

 这个属性的值是一个数组,里边有一些其他项目的坐标。

④ 构建插件列表。

这个属性是一个数组,定义项目需要的一些插件,比如源码打包工具、web容器

还有一些属性在后边介绍。

maven项目对象的部分方法

①mvn compile  编译项目

②mvn package 打包项目

③mvn clean 清除之前编译和打包产生的文件

④mvn install  将项目安装到本地仓库

⑤mvn test 运行测试代码

二、maven的安装

① 访问http://maven.apache.org/download.html 下载最新版本

② 解压到maven工作目录,比如d盘根目录

③ 配置maven环境变量

MAVEN_HOME : D:\apache-maven-3.0.2 
  MAVEN : %MAVEN_HOME%\bin 
  在path 前面 加上 %MAVEN%;

④ 打开cmd敲 mvn -version, 回车。

如看到下面信息表示安装成功: 
   

三、maven项目结构和项目创建方法

 项目结构:

一级目录src为源码目录

  二级目录main/java为项目主要代码目录

    三级目录就是项目的source目录了

  二级目录test/java为项目测试代码目录

    三级目录   测试代码source目录

一级目录 编译、打包产生的文件的存放目录

pom.xml文件——项目对象描述文件,前边讲的项目对象的属性和方法配置就在这个文件里边

  maven项目创建方法

① 打开cmd,切换到工作目录,运行

  

  首次运行这个命令maven会下载一大堆依赖的文件,这个不用管。

②  填写quickstart参数

  

  按回车,这样就成功的创建了一个maven项目。

  我们填写的几个参数:

  groupId是帮助项目对象在仓库中定位的

  artifactId决定了生成的项目文件夹目录的名称

  version是项目版本号

  package 是项目source文件下最顶层的包名

③ 项目创建成功

 

④ 也可以把命令一次敲完

四、maven配置文件settings.xml

  在使用maven的时候和仓库相关的一些配置用到了这个文件,所以在这里想讲一讲这个文件。位置:maven\conf\settings.xml。

  ① 修改本地仓库位置

  maven默认本地仓库的位置是  用户\.m2  目录 。这个目录在C盘下,和我们的工作区是分开的,不方便管理。另外,如果系统出现啥问题,C盘格式化了,我们的文件就找不回来了。

  <localRepository>D:/java/maven_repo</localRepository>

  修改这个属性,即可修改本地仓库的位置。

   修改了settings.xml后最好在本地仓库里边复制一份,避免maven重装后配置文件丢失

  ② 配置maven中央仓库位置

  由于祖国很墙,有时候访问中央仓库网速会特别慢或者干脆不可用,所有我们要配置一个maven中央仓库在国内的镜像服务器。

  我使用的是oschina提供的镜像服务器,项目比较全速度也挺快。

<mirrors>
    <mirror>
        <id>nexus-osc</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus osc</name>
        <url>http://maven.oschina.net/content/groups/public/</url>
    </mirror>
</mirrors>    

五、maven项目对象配置文件  pom.xml 解析

pom.xml是maven项目比较核心的一个文件,所以这部分的内容可以算是重头了。我还是按照描述一个对象的方式来描述这个文件吧。

 ①  pom.xml 对象

<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/xsd/maven-4.0.0.xsd">
    <!-- 指定了当前POM的版本 -->
    <modelVersion>4.0.0</modelVersion>
</project>

  这个是pom.xml的壳子,我姑且把它叫做pom对象吧

② 坐标属性

  如果我们认为maven仓库是一个空间,那么坐标属性就是项目在这个空间内的 x、y、z 坐标(刚好决定坐标的标签有三个,这么比喻很合适啊:) )。

<groupId>com.sogou.hi</groupId><!-- 反写的公司网址+项目名 -->
<artifactId>hi</artifactId><!-- 一般是项目名+模块名  如 mcloud.db -->
<version>0.0.1-SNAPSHOT</version><!-- 大版本号.分支版本号.小版本号  snapshot 快照  alpha内测  beta公测  release稳定版  GA正式发布版本 -->

  任何时候要找到一个项目,只需要有这三个属性就可以了

③ 项目依赖列表属性

  概述中说过,这个属性是一个数组,那么在xml文件中的表现形式就是下面这样的:

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
    </dependency>
     <dependency>
      <groupId>com.sogou.ml</groupId>
      <artifactId>ml-b</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>

 这个依赖列表属性表明,该项目依赖了两个项目 junit和ml-b 。项目依赖还有一些其他的属性,真正用的时候是下面这样的:

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope><!-- scope 属性决定该依赖项目在什么阶段,test表示该项目只在测试代码中依赖 具体见  http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope -->
    </dependency>
     <dependency>
      <groupId>com.sogou.ml</groupId>
      <artifactId>ml-b</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <exclusions> <!-- 排除传递关系的依赖。 例如 ml-c 依赖 ml-b,ml-b依赖 ml-a ,那么我们会发现maven让ml-c同时依赖了a和b,通过这个属性可以排除c对a的依赖 -->
          <exclusion>
              <groupId>com.sogou.ml</groupId>
              <artifactId>ml-a</artifactId>
          </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

④ 构建过程中使用插件的属性

 这个配置会让我们的项目在运行 mvn package打包的同时将源码也打包,原本target目录下只会出现 xxx.jar ,现在还会出现一个 xxx-source.jar

    <!-- 为项目构建行为提供相应支持 -->
    <build>
        <!-- 插件列表 -->
        <plugins>
            <!-- 打包源码插件 -->
            <plugin>
                <!-- 插件项目坐标 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <!-- 在什么阶段执行 -->
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

下面这个配置可以让项目打包完成后开始运行web容器,若是web项目就可以在浏览器中访问站点了。

<plugins>
        <plugin>
               <!-- <groupId>org.mortbay.jetty</groupId>
               <artifactId>jetty-maven-plugin</artifactId>
               <version>8.1.15.v20140411</version>-->
               <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>
               <executions>
                   <!-- 打包成功后即开始运行web容器 -->
                   <execution>
                       <phase>package</phase>
                       <goals>
                           <goal>
                               run
                           </goal>
                       </goals>
                   </execution>
               </executions>
        </plugin>
    </plugins>

⑤ 项目聚合属性

  假如我们有好几个项目,需要一起编译打包,挨个打包很麻烦,这个时候我们就可以用聚合属性。

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.sogou.ml</groupId>
  <artifactId>ml-all</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>ml-all</name>
  <url>http://maven.apache.org</url>
  <modules>
      <module>
          ../ml-a
      </module>
      <module>
          ../ml-b
      </module>
      <module>
          ../ml-c
      </module>
  </modules>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
</project>

  新建一个pom文件,将packaging打包方式修改为pom。

  添加modules属性,这个属性也是一个数组,里边有一些项目文件夹的路径,编译打包这个pom项目的时候,会将modules里边的项目都编译打包。

⑥ 父子项目属性

  新建一个新的maven项目,pom修改如下

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.sogou.ml</groupId>
  <artifactId>ml-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>ml-parent</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>3.8.1</junit.version>
  </properties>
<dependencyManagement>
 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

</project>

  打包方式同样的修改为pom。添加<dependencyManagement>节点,这个节点下是项目依赖属性。

  在此节点下的依赖项目并不会在本项目中生效,但是可以在子项目的依赖中指定依赖,子项目配置如下:

  <parent>
      <groupId>com.sogou.ml</groupId>
    <artifactId>ml-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
  </dependencies>

  这样就可以让子项目依赖在父项目中配置的项目了

六、为eclipse安装maven插件

 若我们使用的eclipse中米有maven插件,可以自己下载安装一个。

    http://download.csdn.net/detail/cnclenovo/5181671

  下载后解压到  eclipse\dropins 目录下即可。

  打开Windows-preference 看到maven说明安装成功。

  

   现在我们创建maven项目、编译打包等操作,都可以用eclipse插件来完成了。

  

  转发请注明出处:http://www.cnblogs.com/tzyy/p/4768859.html

时间: 2024-10-29 12:32:03

使用maven来管理java项目的相关文章

像Maven一样构建java项目的目录,更好的管理java工程的源码

都知道maven具有管理Java或者Javaweb的功能.我个人尤其看中的是其代码层次的分离.不同的代码在不同的文件夹下.这是在eclipse新建一个普通的工程无法实现的.而如果用maven实现有时候显得有点没有必要,特别是平时练习写代码的时候.能不能手动把普通的Java项目的目录结构修改为类似maven管理的项目的目录结构.这是当然可以的. Maven项目的目录结构: 从图中可以看出maven构建的Java web项目的目录很有层次感,src/main/java目录下存放的一般是项目的主要的代

Jenkins通过maven构建编译JAVA项目

Jenkins 通过maven 构建编译 JAVA 项目环境 官网下载合适Jenkins版本包: jenkins http://mirrors.jenkins.io/war-stable/  Jdk curl -L -O http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz  JDK SE http://120.52.72.24/download.oracle.com/c3pr90ntc0td

Maven—如何使用maven命令创建Java项目或Java Web项目

博客<Maven-Windows操作系统中安装配置Maven环境>介绍了如何在Windows操作系统中安装配置Maven,现总结一下如何借助maven命令创建Java项目或Java Web项目: 1.借助maven命令创建Java项目: 1.借助maven命令创建Java Web项目:

Linux上Makefile管理java项目

前面文章讲到了Linux上通过.spec文件与rpmbuild命令将java程序打包为RPM安装包, 现阶段遇到新的需求: 使用Makefile来操纵java的编译.打包 该需求以前面的内容为基础 可以查看下面几篇文章,即可解决上述需求 建议:先从一个小一点的案例入手,通过Makefile成功运行之后,一步步尝试运行自己的实际项目(注意结构:源码.jar包.配置文件等) 自己动手编译.运行Java程序 http://www.cnblogs.com/haolujun/archive/2013/03

owner:轻松管理java项目配置

前段时间,一同事说在 github 上“活捉了”一个很有趣的开源项目,它是一个超轻量级的 jar 包,能够帮助你在 java 项目中摒弃样板式的 properties 配置代码,让你轻松自如地管理和使用 properties. 是的,它就是本文的主角 owner. 关于 owner 的迷人之处,可以先从以下三方面一窥全豹: 简便:无需加载多余代码,转换并管理 properties 配置文件,通过最简单的方式使用你的 properties 强大:基于注解,自动类型转换,变量扩展,加载策略,热加载,

Maven命令创建java项目

------------------------------java项目搭建--------------------------- 使用Maven构建一个简单的Java项目 1.进入命令行,执行下面的语句. mvn archetype:generate -DgroupId=cn.luxh.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false --------

IntelliJ IDEA 打包Maven 构建的 Java 项目

方法 2,一键生成方便到哭 打开maven项目路径 一键生成 3.生成jar 目标文件在 path/target/xx.jar下面 方法 1 选中Java项目工程名称,在菜单中选择 File->project structure... (快捷Ctrl+Alt+Shift+S) 选中"Artifacts",点击"+"选择jar,然后选择"from modules with dependencies" 配置"Main Class &q

Eclipse+Maven整合开发Java项目(二)?webapp3.0以上的Maven项目

概述 Eclipse集成Maven插件,新建maven-archetype-webapp项目的时候,采用的webapp的版本较低,默认是2.3,有些时候,我们希望升级Webapp的版本到3.0(Tomcat支最高支持3.0),通过Eclipse修改Webapp属性Project Facets中Dynamic web module为3.0的时候,Eclipse提示 cannot change version web module 3.0,但是有时候,我们想强制使用3.0的版本,需要修改一些相应配置

使用Maven构建Java项目

一.Maven是什么? Maven 是一个项目管理和构建自动化工具.Maven基于POM(Project object model),能够管理项目的构建.报表.文档等信息. 我们这里主要讲的Maven的项目构建功能.有了Maven,我们可以方便的管理Java项目的生命周期和依赖.通过定义一个POM文件,我们就可以自动的完成编译.测试.打包甚至发布等过程. 二.为什么要用Maven? 做过Java项目的童鞋都知道,一个项目中Java代码经常会依赖其他的jar包中的class,或者依赖其它的项目,手