Maven 使用教程(三)

一、如何使用外部依赖项?

您可能已经注意到POM中的一个dependencies元素,我们一直在使用它作为示例。事实上,您一直在使用外部依赖项,但在这里我们将更详细地讨论它是如何工作的。有关更全面的介绍,请参阅我们的依赖机制介绍。
pom.xml的依赖项部分列出了我们的项目构建所需的所有外部依赖项(无论是在编译时、测试时、运行时还是其他时候)。现在,我们的项目只依赖于JUnit(为了清晰起见,我去掉了所有的资源过滤内容):


  4.0.0
 
  com.mycompany.app
  my-app
  1.0-SNAPSHOT
  jar
 
  Maven Quick Start Archetype
  http://maven.apache.org
 
  
    
      junit
      junit
      4.11
      test
    
  

对于每个外部依赖,您至少需要定义4个内容:groupId、artifactId、version和scope。groupId、artifactId和version与构建该依赖关系的项目的pom.xml中给出的相同。scope元素指示项目如何使用该依赖项,可以是编译、测试和运行时等值。有关可以为依赖项指定的所有内容的详细信息,请参阅项目描述符参考。
有关整个依赖机制的更多信息,请参阅依赖机制简介。
有了这些关于依赖项的信息,Maven将能够在构建项目时引用该依赖项。Maven从哪里引用依赖项?Maven在本地存储库中查找所有依赖项(默认位置为${user.home}/.m2/存储库)。在上一节中,我们将项目中的工件(my-app-1.0-SNAPSHOT.jar)安装到本地存储库中。一旦它安装在那里,另一个项目可以将该jar作为依赖项引用,只需将依赖项信息添加到其pom.xml即可:


  com.mycompany.app
  my-other-app
  ...
  
    ...
    
      com.mycompany.app
      my-app
      1.0-SNAPSHOT
      compile
    
  

在其他地方建立的依赖关系呢?它们是如何进入我的本地存储库的?每当项目引用本地存储库中不可用的依赖项时,Maven都会将该依赖项从远程存储库下载到本地存储库。当你构建第一个项目时,你可能注意到Maven下载了很多东西(这些下载是用于构建项目的各种插件的依赖项)。默认情况下,Maven使用的远程存储库可以在https://repo.maven.apache.org/maven2/.您还可以设置自己的远程存储库(可能是公司的中央存储库)来代替默认远程存储库或在默认远程存储库外使用。有关存储库的更多信息,请参阅存储库简介。

让我们为我们的项目添加另一个依赖项。假设我们已经在代码中添加了一些日志记录,并且需要添加log4j作为依赖项。首先,我们需要知道log4j的groupId、artifactId和版本是什么。Maven Central上相应的目录名为/maven2/log4j/log4j。该目录中有一个名为maven-metadata.xml的文件。下面是log4j的maven-matadata.xml的样子:


  log4j
  log4j
  1.1.3
  
    
      1.1.3
      1.2.4
      1.2.5
      1.2.6
      1.2.7
      1.2.8
      1.2.11
      1.2.9
      1.2.12
    
  

从这个文件中,我们可以看到我们想要的groupId是“log4j”,artifactId是“log4j”。我们看到许多不同的版本值可供选择;现在,我们只使用最新版本1.2.12(一些maven-metadata.xml文件可能还指定哪个版本是当前发布版本:请参阅存储库元数据参考)。除了maven-metadata.xml文件,我们还可以看到与log4j库的每个版本相对应的目录。在每一个文件中,我们都会找到实际的jar文件(例如log4j-1.2.12.jar)、pom文件(这是依赖项的pom.xml,指示它可能具有的任何其他依赖项和其他信息)和另一个maven-metadata.xml文件。还有一个对应于这些文件的md5文件,其中包含这些文件的md5哈希。您可以使用它来验证库,或者确定您可能已经在使用特定库的哪个版本。
现在我们知道了我们需要的信息,我们可以将依赖项添加到pom.xml中:


  4.0.0
 
  com.mycompany.app
  my-app
  1.0-SNAPSHOT
  jar
 
  Maven Quick Start Archetype
  http://maven.apache.org
 
  
    
      junit
      junit
      4.11
      test
    
    
      log4j
      log4j
      1.2.12
      compile
    
  

现在,当我们编译项目(mvn-compile)时,我们将看到Maven为我们下载log4j依赖项。

二、如何在远程存储库中部署jar?

为了将jar部署到外部存储库,您必须在pom.xml中配置存储库url,并在settings.xml中配置用于连接到存储库的身份验证信息。
下面是一个使用scp和用户名/密码身份验证的示例:


  4.0.0
 
  com.mycompany.app
  my-app
  1.0-SNAPSHOT
  jar
 
  Maven Quick Start Archetype
  http://maven.apache.org
 
  
    
      junit
      junit
      4.11
      test
    
    
      org.apache.codehaus.plexus
      plexus-utils
      1.0.4
    
  
 
  
    
      src/main/filters/filters.properties
    
    
      
        src/main/resources
        true
      
    
  
  
  
    
      mycompany-repository
      MyCompany Repository
      scp://repository.mycompany.com/repository/maven2
    
  

  ...
  
    
      mycompany-repository
      jvanzyl
      
      /path/to/identity (default is ~/.ssh/id_dsa)
      my_key_passphrase
    
  
  ...

请注意,如果您连接到的openssh-ssh服务器的sshd_config中的参数“PasswordAuthentication”设置为“no”,则每次都必须键入密码进行用户名/密码身份验证(尽管您可以通过键入用户名和密码使用另一个ssh客户端登录)。在这种情况下,您可能希望切换到公钥身份验证。
如果在settings.xml中使用密码,应格外小心。

三、如何创建文档?

要开始使用Maven的文档系统,可以使用原型机制,使用以下命令为现有项目生成站点:

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

现在转到创建网站指南,了解如何为您的项目创建文档。

四、如何构建其他类型的项目?

请注意,生命周期适用于任何项目类型。例如,在基本目录中,我们可以创建一个简单的web应用程序:

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

请注意,这些必须都在一行上。这将创建一个名为my-webapp的目录,其中包含以下项目描述符:


  4.0.0
 
  com.mycompany.app
  my-webapp
  1.0-SNAPSHOT
  war
 
  
    
      junit
      junit
      4.11
      test
    
  
 
  
    my-webapp
  

请注意<packaging>元素-这个元素告诉Maven构建为一个WAR。更改到Web应用程序项目的目录并尝试:

mvn package

您将看到target/my-webapp.war已经构建,并且所有正常步骤都已执行。

五、如何一次构建多个项目?

你可能感兴趣的:(Maven,maven,java)