2017.03.31

1.pom.xml中build标签
答:
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
<filters>
<filter>filters/filter1.properties</filter>
</filters>
</build>
(1)defaultGoal
执行build任务时,如果没有指定目标,将使用的默认值。
如上配置:在命令行中执行mvn,则相当于执行mvn install
2)directory
build目标文件的存放目录,默认在${basedir}/target目录
3)finalName
build目标文件的名称,默认情况为${artifactId}-${version}
4)filter
定义*.properties文件,包含一个properties列表,该列表会应用到支持filter的resources中。
也就是说,定义在filter的文件中的name=value键值对,会在build时代替${name}值应用到resources中。
maven的默认filter文件夹为${basedir}/src/main/filters
(2)Resources配置
用于包含或者排除某些资源文件
<build>
...
<resources>
<resource>
<targetPath>META-INF/plexus</targetPath>
<filtering>false</filtering>
<directory>${basedir}/src/main/plexus</directory>
<includes>
<include>configuration.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</resource>
</resources>
<testResources>
...
</testResources>


(3)plugins配置
用于指定使用的插件
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.0</version>
<extensions>false</extensions>
<inherited>true</inherited>
<configuration>
<classifier>test</classifier>
</configuration>
<dependencies>...</dependencies>
<executions>...</executions>
</plugin>
</plugins>
</build>

2)extensions
是否加载plugin的extensions,默认为false
3)inherited
true/false,这个plugin是否应用到该pom的孩子pom,默认为true
...
</build>


3.默认情况下,Maven的本地资源库默认为 .m2 目录文件夹:

Unix/Mac OS X – ~/.m2
Windows – C:\Documents and Settings\{your-username}\.m2

4.1. 更新Maven的本地库

通常情况下,可改变默认的 .m2 目录下的默认本地存储库文件夹到其他更有意义的名称,例如, maven-repo

找到 {M2_HOME}\conf\setting.xml, 更新 localRepository 到其它名称。

{M2_HOME}\conf\setting.xml
<settings><!-- localRepository
| The path to the local repository maven will use to store artifacts.

| Default: ~/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
--><localRepository>D:\software\yiibai.com\apache-maven\repository</localRepository>


5.当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载。

6.具体下载jar包的工作是你本地安装的maven程序去做的,Eclipse的maven插件只是起调用本地maven软件的意思。
7.你每次修改pom.xml,Eclipse的maven插件会唤醒本地maven软件去下载jar包。
8.每次修改调整pom.xml时,Maven将首先从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 。
9.maven中央仓库的PS:目录浏览功能被禁用,但是,当你建立 Maven 的项目,它仍然会从 “http://repo1.maven.org/maven/” 得到依赖, 您可以从 Maven 验证输出。
10.默认情况下,Maven从Maven中央仓库下载所有依赖关系。但是,有些库丢失在中央存储库,只有在Java.net或JBoss的储存库远程仓库中能找到。
1. Java.net资源库

添加Java.net远程仓库的详细信息在“pom.xml”文件。

pom.xml
<project ...>
<repositories>
<repository>
<id>java.net</id>
<url>https://maven.java.net/content/repositories/public/</url>
</repository>
</repositories>
</project>


旧的 “http://download.java.net/maven/2” 仍然可用, 但建议升级到最新储存库。
2. JBoss Maven存储库

1. 添加JBoss远程仓库的详细信息在 “pom.xml” 文件中。

pom.xml
<project ...>
<repositories>
<repository>
<id>JBoss repository</id>
<url>http://repository.jboss.org/nexus/content/groups/public/</url>
</repository>
</repositories>
</project>


5.<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
它会自动下载 log4j 的1.2.14 版本库。如果“version”标签被忽略,它会自动升级库时当有新的版本时。

6.当 Maven 编译或构建,log4j 的 jar 会自动下载,并把它放到 Maven 本地存储库

7.看看有什么不同?那么到底在Maven发生了什么?当建立一个Maven的项目,pom.xml文件将被解析,如果看到 log4j 的 Maven 坐标,然后 Maven 按此顺序搜索 log4j 库:

在 Maven 的本地仓库搜索 log4j
在 Maven 中央存储库搜索 log4j
在 Maven 远程仓库搜索 log4j(如果在 pom.xml 中定义)
Maven 依赖库管理是一个非常好的工具,为您节省了大量的工作。

如何找到 Maven 坐标?
访问 Maven 中心储存库,搜索下载您想要的jar。

10.这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库。

要使用的 jar 不存在于 Maven 的中心储存库中。
您创建了一个自定义的 jar ,而另一个 Maven 项目需要使用。
PS,还是有很多 jar 不支持 Maven 的。

案例学习

例如,kaptcha,它是一个流行的第三方Java库,它被用来生成 “验证码” 的图片,以阻止垃圾邮件,但它不在 Maven 的中央仓库中。

在本教程中,我们将告诉你如何安装 “kaptcha” jar 到Maven 的本地资源库。

1. mvn 安装

下载 “kaptcha”,将其解压缩并将 kaptcha-version.jar 复制到其他地方,比如:C盘。发出下面的命令:

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
示例:


D:\>mvn install:install-file -Dfile=c:\kaptcha-2.3.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion=2.3 -Dpackaging=jar
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [install:install-file] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [install:install-file]
[INFO] Installing c:\kaptcha-2.3.jar to
D:\maven_repo\com\google\code\kaptcha\2.3\kaptcha-2.3.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Tue May 12 13:41:42 SGT 2014
[INFO] Final Memory: 3M/6M
[INFO] ------------------------------------------------------------------------

现在,“kaptcha” jar被复制到 Maven 本地存储库。

2. pom.xml

安装完毕后,就在 pom.xml 中声明 kaptcha 的坐标。

<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3</version>
</dependency>
3. 完成

构建它,现在 “kaptcha” jar 能够从你的 Maven 本地存储库检索了。

10.一个标准的 pom.xml 被生成。这个POM文件类似于 Ant build.xml 文件,它描述了整个项目的信息,一切从目录结构,项目的插件,项目依赖,如何构建这个项目等。

11.默认的 pom.xml 太简单了,很多时候,你需要添加编译器插件来告诉 Maven 使用哪个 JDK 版本是用来编译项目。(默认JDK1.4,这的确太旧了点)

12.maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配的问题,以至于可能导致编译不通过的问题。例如代码中要是使用上了jdk1.7的新特性,但是maven在编译的时候使用的是jdk1.6的版本,那这一段代码是完全不可能编译成.class文件的。为了处理这一种情况的出现,在构建maven项目的时候,第一步就是配置maven-compiler-plugin插件。
compiler插件能解决:
1:maven 2.1默认用jdk 1.3来编译,maven 3 貌似是用jdk 1.5,如果项目用的jdk 1.6也会有问题,compiler插件可以指定JDK版本为1.6。
2:windows默认使用GBK编码,java项目经常编码为utf8,也需要在compiler插件中指出,否则中文乱码可能会出现编译错误。

pom增加插件配置
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilerVersion>1.7</compilerVersion>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
然后mvn compile就没有以上错误了。

20.灰度发布:
原来灰度发布就是保持两份不同的版本,让一小撮用户先在新版本上尝鲜,等这部分小白鼠用户稳定了,在把绝大部分的用户迁移到新版本上来。别的先不说,就针对之前我们部门那么多领导提出来的问题,一一解答下:

22.这里打断一下,最近这几年您听说过淘宝升级么?如果没有记错,最近的一次淘宝发公告要暂停业务进行系统升级是2008年,之后再也没有听说过淘宝通过半夜停业务的方式来做系统升级的事情了。您听说过QQ升级么,事实上QQ从最开始的只能有500个好友到现在支持上亿的好友,经历过大大小小上千次的升级,从来没有停业务这一说法,为什么啊?因为互联网产品有一个特点,为了减少甚至避免系统升级对用户使用造成影响,在升级的过程中都采用了灰度发布的策略。

24.要导入这个项目到Eclipse中,需要生成一些 Eclipse 项目的配置文件。
最新版本的Eclipse已经可以自动生成没有Eclipse配置文件的工程的,为他们生成配置文件了,

25.maven的dependency,具体怎么写exclusion。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

26.还通过 Spring 监听器 ContextLoaderListener 集成了Spring框架。

27.Syntax error, annotations are only 改jdk版本,
Syntax error, annotations are only available if source level is 5.0

在Myeclipse编辑代码时,有时候遇到上面这种问题,主要是使用的jdk版本过低,可以通过如下配置解决。
鼠标右键点击报错的项目,然后选择最下面的properties,也可以鼠标左键点击项目后,通过快捷键alt+回车打开,
然后将会看到下面这个界面,点击Java Compiler,
这个时候选择看到图中的,默认jdk为1.4,低于错误代码中说的1.5,点击下拉框选择5.0及以上的版本,并点击下方的OK保存,如果有提示,点击yes。


28.java程序用maven打包的时默认没有加入依赖的jar包的,这是需要修改下pom文件,加入如下plugin
29.java程序用maven打包的时默认没有加入依赖的jar包的,这是需要修改下pom文件,加入如下plugin
30.java程序用maven打包的时默认没有加入依赖的jar包的,这是需要修改下pom文件,加入如下plugin

35.POM 代表项目对象模型。它是工作在 Maven 的基本单位。这是一个 XML 文件。它始终保存在该项目基本目录中的 pom.xml 文件。

36.POM 也包含了目标和插件。在执行任务或目标时,Maven 会使用当前目录中的 POM。它读取POM,得到所需要的配置信息,然后执行目标。
37.创建一个POM之前,我们应该先决定项目组(groupId),它的名字(artifactId)和版本,因为这些属性在项目仓库是唯一标识的。
38.构建生命周期阶段的目标是执行顺序是一个良好定义的序列。
这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:

阶段 处理 描述
准备资源 资源复制 资源复制可以进行定制
编译 执行编译 源代码编译在此阶段完成
包装 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
安装 安装 这一阶段在本地/远程Maven仓库安装程序包

39.maven构建项目生命周期:
构建生命周期阶段的目标是执行顺序是一个良好定义的序列。
这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:

阶段 处理 描述
准备资源 资源复制 资源复制可以进行定制
编译 执行编译 源代码编译在此阶段完成
包装 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
安装 安装 这一阶段在本地/远程Maven仓库安装程序包

40.注意:maven install步骤,是将你项目自己的jar包发布到本地仓库和远程仓库
41.当运行 Maven 构建,那么 Maven 会自动下载所有依赖的jar到本地存储库中。
42.Maven 本地存储库,默认情况下创建在 %USER_HOME% 目录。要覆盖默认位置,可在 Maven 的 settings.xml 文件中修改 %M2_HOME%conf 目录指向另一个路径。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>C:/MyLocalRepository</localRepository>
</settings>
当运行 Maven 命令,Maven 会下载依赖到您的自定义路径。

43.中央储存库
Maven中央存储库是由Maven社区提供的资源库。它包含了大量的常用程序库。

当Maven没有在本地存储库找到任何依赖,就会开始搜索在中央存储库,它会使用下列网址: http://repo1.maven.org/maven2/

中央仓库的关键概念:

此系统信息库由Maven社区管理

它不要求配置

搜索时需要互联网接入

44.远程仓库
有时,Maven不能从依赖中央存储库找到上述库,那么它停下构建过程并输出错误消息到控制台。为了防止这种情况,Maven提供远程仓库概念,这是开发商的自定义库包含所需的库文件或其他项目 jar 文件。

 

有时,Maven不能从依赖中央存储库找到上述库,那么它停下构建过程并输出错误消息到控制台。为了防止这种情况,Maven提供远程仓库概念,这是开发商的自定义库包含所需的库文件或其他项目 jar 文件。

例如,使用以下提到的 pom.xml,Maven 会从远程仓库下载依赖项(不在中央存储库中提供)。

<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.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <dependencies>
      <dependency>
         <groupId>com.companyname.common-lib</groupId>
         <artifactId>common-lib</artifactId>
         <version>1.0.0</version>
      </dependency>
   <dependencies>
   <repositories>
      <repository>
         <id>companyname.lib1</id>
         <url>http://download.companyname.org/maven2/lib1</url>
      </repository>
      <repository>
         <id>companyname.lib2</id>
         <url>http://download.companyname.org/maven2/lib2</url>
      </repository>
   </repositories>
</project>

Maven 依赖搜索序列

当我们执行 Maven 构建命令,Maven 依赖库按以下顺序进行搜索:

  • 第1步 - 搜索依赖本地资源库,如果没有找到,跳到第2步,否则,如果找到那么会做进一步处理。

  • 第2步 - 搜索依赖中央存储库,如果没有找到,则从远程资源库/存储库中,然后移动到步骤4,否则如果找到,那么它下载到本地存储库中,以备将来参考使用。

  • 第3步 - 如果没有提到远程仓库,Maven 则会停止处理并抛出错误(找不到依赖库)。

  • 第4步 - 远程仓库或储存库中的搜索依赖,如果找到它会下载到本地资源库以供将来参考使用,否则 Maven 停止处理并抛出错误(找不到依赖库)。

什么是 Maven 的插件?

Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的。Maven 插件通常用于:

  • 创建 jar 文件

  • 创建 war 文件 

  • 编译代码文件

  • 进行代码单元测试

  • 创建项目文档

  • 创建项目报告

 

一个插件通常提供了一组目标,可使用以下语法来执行:

mvn [plugin-name]:[goal-name]

例如,一个 Java 项目可以使用 Maven 编译器插件来编译目标,通过运行以下命令编译

mvn compiler:compile

插件类型

Maven 提供以下两种类型插件:

类型描述
构建插件在生成过程中执行,并在 pom.xml 中的<build/> 元素进行配置
报告插件在网站生成期间执行,在 pom.xml 中的 <reporting/> 元素进行配置

以下是一些常见的插件列表:

插件描述
clean编译后的清理目标,删除目标目录
compiler编译 Java 源文件
surefile运行JUnit单元测试,创建测试报告
jar从当前项目构建 JAR 文件
war从当前项目构建 WAR 文件
javadoc产生用于该项目的 Javadoc
antrun从构建所述的任何阶段运行一组 Ant 任务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值