我能正确理解Maven吗?

时间:2015-07-11 20:15:54

标签: java maven

最近我想尝试Apache Crunch库。为此,我了解了Maven。

据我了解,为了使用库,只需要在项目的pom.xml文件中添加适当的<dependency>..</dependency>块,然后构建项目。所有依赖项都将由Maven以递归方式下载。

我的问题很简单:我的理解是否正确?因为在这个例子中,我只是将crunch-core依赖项粘贴到pom文件中,并且只下载了一些依赖项(因此我在运行应用程序时得到了ClassNotFoundException,这就是我想避免)。

我的问题与Crunch无关。我正在尝试验证我对如何使用Maven使用第三方库的理解是否正确。或者如果我遗失了什么。

编辑:我看到我的理解是正确的。关于我的具体问题,这是我的pom

<?xml version="1.0" encoding="UTF-8"?>
<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>aviv</groupId>
    <artifactId>crunch-try</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.crunch</groupId>
            <artifactId>crunch-core</artifactId>
            <version>0.12.0-hadoop2</version>
        </dependency>
    </dependencies>

</project>

有什么猜测应用失败的原因?我是否希望单独下载其他依赖项?

1 个答案:

答案 0 :(得分:1)

crunch-core的几个依赖项被标记为“已提供”。这意味着crunch开发人员希望它仅在某人或某物将它们添加到类路径中的环境中使用。您需要在预期的环境中运行您的应用程序,或者手动将所有这些提供的依赖项添加到您的pom。

提供依赖关系在pom中的唯一原因是Maven(尚未)区分“构建事物所需的pom内容”和“使其他事物可以使用的pom内容”它。' Maven没有下载这些,因为原作者说'这个jar需要在hadoop里面运行,这些东西已经在hadoop的类路径中了。'

我在this convenient location阅读了它们。