gpt4 book ai didi

多模块项目上的 Maven 站点无法解决依赖关系

转载 作者:行者123 更新时间:2023-12-03 01:48:37 27 4
gpt4 key购买 nike

我想将我的持续集成工作(Hudson)分为两个步骤。 (因为构建和报告一起运行的时间太长。)在第一份工作中,我使用“mvn package”成功构建了我的多模块maven项目。然后,我将工作区复制到另一个位置,并尝试仅使用目标“site”和/或 findbugs/checkstyle/pmd 再次构建项目以创建报告。但这是行不通的! Maven 无法解析我的子模块的依赖项。(但是所有 JAR 都可以在其目标文件夹中使用。)

示例:我的结构如下所示:

  • 家长
    • 一个
    • B
    • C
    • D

项目 C 具有依赖项目 B。

当我使用“mvn site”构建所有内容时,它会为项目 A 和 B 生成所有报告。但在项目 C 处停止,并显示错误消息“无法解析项目 B 的依赖关系”。但是项目 B 已经使用“mvn package”构建了。 IE。我可以在项目B的目标文件夹中找到项目B的JAR文件。

是否有任何方法可以在不使用“mvn install”的情况下解决子模块 B 的依赖关系?(我不想在我的 ci 服务器上执行此操作。我担心这对于具有相同代码库的其他作业来说可能是危险的。)

2012 年 8 月 20 日更新:

根文件夹的 POM:

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>Foo</name>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>parent</module>
</modules>
</project>

父 POM:

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>Foo</name>
<groupId>foo</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>../bar-a</module>
<module>../bar-b</module>
<module>../bar-c</module>
<module>../bar-d</module>
</modules>
[...]
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.5.1</version>
[...]
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.7.1</version>
[...]
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.9.1</version>
[...]
</plugin>
</plugins>
</reporting>
</project>

B 的 POM:

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>foo</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
<relativePath>../parent</relativePath>
</parent>
<name>Bar B</name>
<artifactId>bar-b</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
[...]
</project>

C 的 POM:

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>foo</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
<relativePath>../parent</relativePath>
</parent>
<name>Bar C</name>
<artifactId>bar-c</artifactId>
<packaging>jar</packaging>
[...]
<dependencies>
<dependency>
<groupId>foo</groupId>
<artifactId>bar-b</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
[...]
</project>

最佳答案

我面临着同样的“长时间”问题。

(我认为)用你的工作方式解决这个问题的唯一方法确实是 mvn install,正如你所建议的那样。

但问题确实在于您尝试通过复制工作区实现不同行为的方式。相反,您应该考虑 CI 将按照您想要的频率(每次提交或每小时)构建和测试,但只报告一次(例如,每个午夜)。您将能够在夜间进行更快的连续构建以及正确的文档和报告。

这就是我们的工作方式,而且已经足够了。我们使用 jenkins 来实现这一点,但我认为你可以用每个 CI 软件来触发它)!

@hourly : mvn clean package (or install) --> from 1 to 5 minutes to run all test on all modules
@daily : mvn clean install site --> from 15 to 35 minutes to run all test on all modules + doc + reports + PDF reports

您还可以使用配置文件来触发不同的行为,但这对于这样的基本用途来说太复杂了。

关于多模块项目上的 Maven 站点无法解决依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com