maven3读书笔记3 第一个maven工程

本文介绍了在命令行中使用Mavenarchetype快速创建项目的方法,详细解析了`mvnarchetype:generate`和`mvnpackage`命令,阐述了Maven的生命周期、pom.xml核心文件结构,以及依赖管理和资源文件的使用。
摘要由CSDN通过智能技术生成

在命令行中输入:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

可以先切换到目标目录后执行此命令。

执行后,进入my-app目录

可以看到标准的maven结构:

my-app

|--pom.xml

`--src

    `--main

         `--java

    `--test

         `--java

pom.xml包含了项目对象的定义

而src则包含了代码和测试代码

解析一下以上命令

archetype:generatearchetype实际是maven中的一个插件archetype。使用原型插件和一些参数我们按照事先定义好的原型创建了一个maven项目

对项目打包:

mvn package

打好的包在工程target目录下

注:你可能看到两个命令不一样,这里涉及到一个概念,archetype:generate是一个目标,而package则是一个阶段,一个阶段是有步骤和顺序的,可能在之前有很多其他的步骤,执行这个阶段,会导致之前的阶段的阶段会执行。这些阶段都包含在项目构建的生命周期中。

maven生命周期的阶段列表:

  • validate: 验证工程的正确性
  • compile: 编译工程
  • test: 使用测试代码测试工程,非必要
  • package: 打包
  • integration-test: 集成测试
  • verify: 验证包的有效性
  • install: 安装包到本地仓库中,作为其他项目的使用依赖
  • deploy: 发布到生产环境中,可以远程发布

 另外还有2个阶段不在生命周期中:

  • clean:清理以前构建的项目
  • site: 为项目产生文档

阶段会执行一些隐藏的目标,也可以显式的使用来产生不同的目标:

如打包时可以为阶段指定目标

mvn package war:war

阶段,目标可以在一个命令中按顺序执行

mvn clean dependency:copy-dependencies package

这个命令的执行顺序:清理工程-拷贝依赖-将项目打包

下面来看下maven工程的核心文件pom.xml这个文件包含了整个项目的必要信息,工程就是围绕这个文件来进行构建和管理的,所以必须熟悉这个文件。

pom.xml的一些基本元素:

  • project 顶级元素,其他的都包含在这个里面.
  • modelVersion pom模型的版本,这个东西本身的改变是非常频繁的,但是为了项目稳定,除非项目管理者觉得有必要才改变.
  • groupId 公司和组织创建的项目的唯一标记.一般用公司或组织域名。
  • artifactId 项目主要构件的唯一基本名称. 也是典型的jar包命令的一部分. 另外作为资源包时这也是最终命令的一部分. 典型的构件名称组成<artifactId>-<version>.<extension> (for example, myapp-1.0.jar).一般来说就是工程名。
  • packaging 指定了主要构建打包的类型. 这不仅仅是包的类型定义也是构建生命周期的一个阶段. 默认为jar.
  • version 项目主要构件的版本. 表示了项目的开发状态.
  • name 项目的名称. 经常用来产生文档.
  • url 项目的站点,找项目地址用的. 经常用来产生文档.
  • description 项目基本描述. 产生文档用的.

 maven的插件配置

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.5.1</version>
      <configuration>
        <source>1.5</source>
        <target>1.5</target>
      </configuration>
    </plugin>
  </plugins>
</build>

 

maven使用资源文件

maven资源文件的放置路径一般为src/main/resources

放在此目录下的文件在打包时会进入包的根目录下。

另外,resources中的属性文件经常会引用一些属性在构建的时候,那么需要在pom.xml做显示的声明

一般在pom.xml文件中定义属性如下:

<properties>

    <author>xxxxx</author>

</properties>

另外如果想用外部文件来定义属性。在maven中这类文件一般放置在

src/main/filters下

同时,因为引用属性在pom.xml默认是false,所以需要显式声明

<build>

  <resources>

      <resource>src/main/resources</resource>

  </resources>

</build>

完整的引用一个外部属性文件的写法

  <build>
 <filters>
  <filter>src/main/filters/filter.properties</filter>
 </filters>
 <resources> 
  <resource>
   <directory>src/main/resources</directory>
   <filtering>true</filtering>
  </resource>
 </resources>

  </build>

maven使用外部依赖

在pom.xml中添加外部依赖的写法

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
三个主要元素是groupId,artifactId,version这三个元素指定了依赖包

而scope则指定了使用范围,如test就仅在test阶段使用。一般这个值可以为compile, test, and runtime

maven会从远程库安装jar包到本地库。远程库一般在http://search.maven.org

如果你想使用某个依赖,可以到 ibiblio 中去查其maven的元数据

比如你想找log4j,在 ibiblio 中就能找到其路径,查看maven-metadata.xml

<metadata>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.1.3</version>
  <versioning>
    <versions>
      <version>1.1.3</version>
      <version>1.2.4</version>
      <version>1.2.5</version>
      <version>1.2.6</version>
      <version>1.2.7</version>
      <version>1.2.8</version>
      <version>1.2.11</version>
      <version>1.2.9</version>
      <version>1.2.12</version>
    </versions>
  </versioning>
</metadata>

就能知道三个元素来获取依赖jar包。

然后执行mvn-complie就能安装了

部署自己的jar包到远程库中

如果你想把自己的jar包部署到远程库中,需要在pom.xml和setting.xml中配置

pom.xml

  <distributionManagement>
    <repository>
      <id>mycompany-repository</id>
      <name>MyCompany Repository</name>
      <url>scp://repository.mycompany.com/repository/maven2</url>
    </repository>
  </distributionManagement>

setting.xml中

  <servers>
    <server>
      <id>mycompany-repository</id>
      <username>jvanzyl</username>
      <!-- Default value is ~/.ssh/id_dsa -->
      <privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa)
      <passphrase>my_key_passphrase</passphrase>
    </server>
  </servers>

使用原型创建其他类型的工程

创建一个简单的web工程

mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DgroupId=com.mycompany.app \
    -DartifactId=my-webapp

一次构建多个工程 

如果想在war包中包含以前工程的jar包,那么可以在外层创建一个pom.xml作为父级pom

用my-web和my-app举例

在他们的上层目录新建一个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">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>my-app</module>
    <module>my-webapp</module>
  </modules>
</project>

然后在web-app的pom.xml中加入依赖

 <dependency>
  <groupId>com.pjj.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
 </dependency>

然后在my-app和web-app的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/maven-v4_0_0.xsd">
  <parent>
 <groupId>com.pjj.app</groupId>
 <artifactId>app</artifactId>
 <version>1.0-SNAPSHOT</version>
  </parent>
  ..........
</project>

然后在父类pom.xml中执行mvn clean install,就可以看到war包中有my-app的jar包了

备注:常用目标

生成IntelliJ IDEA 工程

mvn ide:ide

生成eclipse工程

mvn eclipse:eclipse

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值