Maven 工件解析器 Ant 任务

Maven Artifact Resolver Ant 任务使Apache Ant 1.7+ 的构建脚本能够使用结合Apache Maven Artifact Resolver Provider的 Maven Artifact Resolver来解决依赖关系并安装和部署本地构建的工件。

要将任务集成到构建文件中,请将 Über JAR 复制到项目的 lib 目录中并使用以下代码段加载它:

<project xmlns:resolver="antlib:org.apache.maven.resolver.ant" ...>
  <taskdef uri="antlib:org.apache.maven.resolver.ant" resource="org/apache/maven/resolver/ant/antlib.xml"
    classpath="lib/maven-resolver-ant-tasks-1.4.0-uber.jar" />
  ...
</project>

请参阅项目源代码中的build.xml以获取完整的示例构建脚本。

Ant 任务与通常的Apache Maven settings.xml紧密集成。默认情况下,通常的${user.home}/.m2/settings.xml用于用户设置。

对于全局设置,将尝试不同的路径:

  • ${ant.home}/etc/settings.xml
  • ${maven.home}/conf/settings.xml

< settings/>定义用于更改:

<settings file="my-settings.xml" globalfile="myglobal-settings.xml"/>

在设置文件或 POM 中定义的一些设置也可以在 Ant 文件中更改。

代理定义在整个会话中使用。可能设置了多个代理。将通过评估每个代理定义上的nonProxyHosts来选择要使用的代理,第一个匹配的代理将用于给定的远程连接。

<proxy host="proxy.mycorp.com" port="8080" type="http" nonProxyHosts="127.*|localhost|*.mycorp.com"/>

身份验证元素用于访问远程存储库。每个身份验证定义都将全局添加并根据服务器属性进行选择。如果未设置此属性,则必须明确引用身份验证才能使用。

<authentication username="login" password="pw" id="auth"/>
<authentication privateKeyFile="file.pk" passphrase="phrase" servers="distrepo" id="distauth"/>

一次只能使用一个本地存储库。

<localrepo dir="someDir"/>

可以直接定义远程存储库:

<remoterepo id="ossrh" url="https://oss.sonatype.org/content/repositories/snapshots/" type="default" releases="false" snapshots="true" updates="always" checksums="fail"/>

<remoterepo id="rao" url="https://repository.apache.org/content/groups/public/">
    <releases enabled="true" updates="daily" checksums="warn"/>
    <snapshots enabled="false"/>
    <authentication refid="auth"/>
</remoterepo>

<remoterepo id="distrepo" url="..." authref="distauth"/>

多个存储库可以在每个对远程存储库合法的地方作为一个组使用:

<remoterepos id="all">
    <remoterepo refid="ossrh"/>
    <remoterepo refid="rao"/>
    <remoterepo refid="distrepo"/>
</remoterepos>

注意:目前,远程存储库仅支持 file:、http: 和 https: 协议。

<mirror id="" url="" mirrorOf=""/>

要抑制任何网络活动并仅使用已缓存的工件/元数据,您可以使用布尔属性:

<property name="resolver.offline" value="true"/>

项目设置处理有关构建的本地可用信息。

POM 是用于确定安装和部署任务目标的数据类型。如果您基于完整的pom.xml文件定义没有 id 的 POM,则默认情况下将使用该 POM 进行安装和部署。

<pom file="pom.xml" id="pom"/>
<pom groupId="g" artifactId="a" version="v"/>
<pom coords="g:a:v"/>

如果通过文件参数设置 POM,则其有效模型可作为 Ant 项目的属性使用。属性以<pom>元素的 ref id 为前缀,例如上面示例的${pom.version}。同样,POM 中定义的项目属性可以通过前缀pom.properties 访问。. 如果没有分配 id,则属性使用前缀pom。默认。

<artifact>元素定义应安装或部署的此构建生成的工件。

<artifact file="file-src.jar" type="jar" classifier="sources" id="src"/>

<artifacts id="producedArtifacts">
    <artifact refid="src"/>
    <artifact file="file-src.jar"/>
</artifacts>

依赖项用于创建类路径或文件集。它们由<resolve> -task 使用,该任务以传递方式收集属于依赖项的工件。

<dependency coords="g:a:v:scope"/>

<dependency groupId="g" artifactId="a" version="v" classifier="c" type="jar" scope="runtime">
    <exclusion coords="g:a"/>
    <exclusion groupId="g" artifactId="a"/>
</dependency>

<dependencies id="deps">
    <dependency refid="first"/>
    <dependency refid="second"/>
    <exclusion coords="g:a"/> <!-- global exclusion for all dependencies of this group -->
</dependencies>

<dependencies>
    <dependency coords="test:artifact:1.0:runtime"/>
    <dependencies refid="deps"/> <!-- nested dependency collection merged into this one -->
</dependencies>

<dependencies id="depsFromPom" pomRef="pom"/>

<dependencies id="depsFromPlainTextFile" file="dependencies.txt"/>
<!--
Each non-empty line of that text file declares one dependency, using the same syntax as for the `coords` attribute
of the `<dependency>` element, i.e.
<groupId>:<artifactId>:<version>[[:<type>[:<classifier>]]:<scope>]
Everything after the first hash (#) character on a line is considered a comment.
-->

您需要设置一个引用文件的 POM,安装任务才能工作。

<install artifactsref="producedArtifacts"/>

您需要设置一个引用文件的 POM 以使部署任务工作,因为该 POM 文件将部署到存储库。

<deploy artifactsref="producedArtifacts">
    <remoterepo refid="distrepo"/>
    <snapshotrepo refid="snaprepo">
</deploy>

< resolve> -task 用于从远程服务器收集和解决依赖关系。如果没有为任务明确设置存储库,则使用“resolver.repositories”引用的存储库。默认情况下,它仅包含中央,但可以通过提供具有此 id 的另一个存储库定义来覆盖。

此任务能够以三种不同的方式组装收集到的依赖项:

  • 类路径:<path>元素定义了一个具有所有已解析依赖项的类路径。
  • 文件:<files>将组装一个包含所有已解析依赖项的资源集合和/或将文件复制到某个目录。
  • 属性:<properties>将使用给定的前缀和解析文件路径的坐标设置属性。

对于同一个解析任务,这些目标也可能被多次提及,但只允许一个<dependencies>元素。

<resolve failOnMissingAttachments="true">
    <dependencies>
        <dependency coords="org.apache.maven:maven-profile:2.0.6"/>
        <exclusion artifactId="junit"/>
        <exclusion groupId="org.codehaus.plexus"/>
    </dependencies>
    <path refid="cp" classpath="compile"/>
    <files refid="src.files" attachments="sources" dir="target/sources"
           layout="{artifactId}-{classifier}.{extension}"/>
    <files refid="api.files" attachments="javadoc" dir="target/javadoc"
           layout="{artifactId}-{classifier}.{extension}"/>
    <properties prefix="dep." scopes="provided,system"/>
</resolve>

<resolve dependenciesref="deps">
    <path refid="cp.compile" classpath="compile"/>
    <path refid="cp.test" classpath="test"/>
</resolve>

范围过滤器可以在每个目标上设置,枚举包含和/或排除的范围名称。排除通过在范围名称前加上-! (例如提供,!系统)。

classpath属性是范围过滤器的快捷方式(例如classpath ="compile"等于scope="provided,system,compile")。有效值为“ compile ”、“ runtime ”、“ test ”。

<resolve>
    <dependencies pomRef="pom"/>
    <remoterepos refid="all"/>
    <path refid="cp" classpath="compile"/>
    <path refid="tp" classpath="test"/>
</resolve>

<files>元素的 layout 属性仅在同时给出dir属性并识别以下占位符以引用当前处理的工件的坐标时才被允许:

  • {groupId},例如“org.apache.maven.resolver”
  • {groupIdDirs},例如“org/apache/maven/resolver”
  • {artifactId},例如“maven-resolver-api”
  • {版本},例如“1.0.0-20140518.181353-123”
  • {baseVersion},例如“1.0.0-SNAPSHOT”
  • {扩展名},例如“jar”
  • {分类器},例如“来源”