Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven mvn依赖关系:树在平凡项目上失败_Maven_Maven Dependency Plugin - Fatal编程技术网

Maven mvn依赖关系:树在平凡项目上失败

Maven mvn依赖关系:树在平凡项目上失败,maven,maven-dependency-plugin,Maven,Maven Dependency Plugin,我有一个非常复杂的项目(大约100个模块),我想在上面运行mvn dependency:tree。它失败了,抱怨它无法解决依赖关系。该项目在其他方面编译良好。因此,我创建了我能想到的最基本的项目,但它仍然失败,并出现同样的错误。显然,要么我犯了一些非常基本的错误,要么maven依赖插件还没有被任何人使用过。以下是三个POM im测试项目: pom.xml: 我错过了什么?这难道不管用吗?好的,让我们做一个正确的回答,因为评论有点太短,无法正确解释 Maven是一个包含各种组合方面的工具,有时很难

我有一个非常复杂的项目(大约100个模块),我想在上面运行
mvn dependency:tree
。它失败了,抱怨它无法解决依赖关系。该项目在其他方面编译良好。因此,我创建了我能想到的最基本的项目,但它仍然失败,并出现同样的错误。显然,要么我犯了一些非常基本的错误,要么maven依赖插件还没有被任何人使用过。以下是三个POM im测试项目:

pom.xml:
我错过了什么?这难道不管用吗?

好的,让我们做一个正确的回答,因为评论有点太短,无法正确解释

Maven是一个包含各种组合方面的工具,有时很难确定哪些部分在给定命令中起作用

在您的示例中,有两个经典项目,
foo
bar
,还有一个特殊项目,
root

root
在这个意义上是特殊的,在您的示例中,它扮演两个角色

  • 第一个称为父pom。它通常用于修复依赖项和插件版本,以及需要级联到子项目的一些常见配置。它还有一个有时有用的属性,即子项目继承版本,除非子项目本身中明确指定
  • 第二个角色称为反应器pom。这是主要在
    标记中定义的部分。它定义了一组其他项目,可以将命令作为组发送到这些项目(例如:
    mvn clean install
    )。当执行这样的命令时,maven将查看
    中描述的项目,并根据它们声明的依赖关系,确定它们必须使用给定命令调用的顺序,以最大限度地提高构建成功的机会
现在,关于您尝试的各种命令的行为(假设它们都在
根项目上调用):

  • mvn dependency:tree
    将对
    标记中列出的所有项目及其自身执行依赖性分析。此分析是针对存储库执行的,表示您的本地.m2 repo以及其他外部存储库(需要时)。如果您没有首先在存储库中安装项目,它将由于找不到
    com,il位于
    bar
    上。示例:foo:1.0.0-SNAPSHOT
  • mvn[clean]install
    ,使用相同的顺序,将执行项目的完整打包并部署到本地存储库中。由于
    bar
    将在
    foo
    放入存储库后执行,因此一切都会很好,每个人都会很高兴
但是,那时起作用的
mvn编译
又如何呢

好吧,您的案例有点棘手。由于您的示例没有要编译的实际代码,因此将跳过编译的依赖项解析,因此,当您的
foo
工件尚不可用时,不会发生错误

现在,关于您在回购协议中关于分支和工件的评论…
当您切换到分支时,除非所有其他项目(模块)使用稳定的版本号(即没有快照后缀),否则您应该在reactor pom上执行
mvn[clean]安装
运行,以确保开始使用一组连贯的模块和依赖项。

您可能会认为,与解释语言相比,这是浪费时间,但这是处理项目的一种专业方式。它确保在开始工作之前,所有模块都已对齐。

我对它为什么不起作用感到沮丧。
简单的依赖性分析根本不起作用。
官员也没有任何指导如何做。
另一个非常有用的命令也不起作用

mvn依赖项:解析
但是,也许你可以试试这些命令

mvn测试编译依赖项:解析
mvn测试编译依赖项:树
不管怎么说,它对我有用


2017年3月13日更新

我们可以通过跳过编译来加快速度

 mvn test-compile dependency:resolve -Dmaven.main.skip=true -Dmaven.test.skip=true
 mvn test-compile dependency:tree    -Dmaven.main.skip=true -Dmaven.test.skip=true

遗憾的是,它对我们的项目不起作用,因为我们的项目使用了kotlin,也许是kotlin的bug没有跳过编译,也许我应该向jetbrains报告这个bug。

您是否先运行了mvn安装?如果没有,您的存储库中还没有foo模块,因此无法在bar模块中解决。使用此3 pom.xml你给了我
mvn依赖项:tree
对我有用。正如@gizmo所说的,首先在父pom上运行
mvn clean install
directory@gizmo我应该吗?这不会把工件放在我的全局
.m2
目录中吗?这似乎是一个非常糟糕的主意。我正在同时处理该项目的多个分支,我不知道“我不想让他们干预。所有模块都在项目目录中,并列在顶级POMs
标记中。@jeanMarcAssin,但是我必须运行
rm-r~/.m2
,除了每个
mvn clean
,这在我看来似乎是在浪费带宽和时间。你为什么要删除你的.m2文件夹呢?首先,请注意。”或者答案,但我不确定两点:
com。例如:root:1.0.0-SNAPSHOT
不是其他两个项目的父项目,我没有在modules
foo
bar
中声明它。当模块包含Java源代码时,
mvn compile
可以工作,即使是
bar
refe中的代码请参阅
foo
中的代码。关于您的评论,我可能会认为这是浪费时间。我不会将其与其他构建系统(如GNU Make)进行比较,GNU Make当然解决了一个非常不同的问题,但在不改变任何全局状态的情况下这样做,因此在我看来,它具有许多优势。我不明白maven为什么需要这一点t全球状态,即insta
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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.example</groupId>
    <artifactId>foo</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
</project>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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.example</groupId>
    <artifactId>bar</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>foo</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] foo
[INFO] bar
[INFO] root
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building foo 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ foo ---
[INFO] com.example:foo:jar:1.0.0-SNAPSHOT
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building bar 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] foo ................................................ SUCCESS [  0.756 s]
[INFO] bar ................................................ FAILURE [  0.011 s]
[INFO] root ............................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.065 s
[INFO] Finished at: 2015-03-03T16:19:18+01:00
[INFO] Final Memory: 13M/309M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project bar: Could not resolve dependencies for project com.example:bar:jar:1.0.0-SNAPSHOT: Could not find artifact com.example:foo:jar:1.0.0-SNAPSHOT -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :bar
 mvn test-compile dependency:resolve -Dmaven.main.skip=true -Dmaven.test.skip=true
 mvn test-compile dependency:tree    -Dmaven.main.skip=true -Dmaven.test.skip=true