当前位置: 首页 > 知识库问答 >
问题:

使用存储库的多模块maven依赖,而不是在Travis CI上本地

祁晟
2023-03-14

我有一个多模块项目,其中两个子模块中的一个依赖于另一个。这个问题意味着MVN install应该处理这些依赖关系。

在我的机器上的本地级别上一切都很好(在Eclipse内部和命令行上)。但是,当我更新修改第二个模块所需代码的模块并提交到我的github存储库时,第二个模块将无法构建Travis CI。我将问题追溯到这样一个事实,即它正在从存储库下载其依赖项,而不是使用它刚刚编译的存储库。

<parent>
    <groupId>com.github.dblock</groupId>
    <artifactId>oshi-parent</artifactId>
    <version>3.0-SNAPSHOT</version>
</parent>

<artifactId>oshi-json</artifactId>
<packaging>jar</packaging>

<name>oshi-json</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>oshi-core</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

和父pom.xml的摘录:

<groupId>com.github.dblock</groupId>
<artifactId>oshi-parent</artifactId>
<version>3.0-SNAPSHOT</version>
<packaging>pom</packaging>

<name>oshi-parent</name>

<modules>
    <module>oshi-core</module>
    <module>oshi-json</module>
</modules>

完整的文件可以在这里获得:

  • oshi-parent pom.xml
  • oshi-core pom.xml
  • oshi-json pom.xml
$ mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
[INFO] Reactor Build Order:
[INFO] 
[INFO] oshi-parent
[INFO] oshi-core
[INFO] oshi-json

这是我希望下一个模块依赖的jar。但是,当oshi-json构建开始时,它将从maven下载工件:

[信息]下载:https://oss.sonatype.org/content/repositories/snapshots/com/github/dblock/oshi-core/3.0-snapshot/oshi-core-3.0-20160624.032041-9.jar

[信息]已下载:https://oss.sonatype.org/content/repositories/snapshots/com/github/dblock/oshi-core/3.0-snapshot/oshi-core-3.0-20160624.032041-9.jar(199 KB,708.5 KB/秒)

编辑:刚刚注意到下载前出现的以下警告,可能与此相关,也可能与此无关(Travis设置中的错误)。然而,修复该警告仍然不能解决我的问题,这里是一个没有警告的失败构建:

[警告]无法将com.github.dblock:oshi-core:3.0-snapshot/maven-metadata.xml从https://nexus.codehaus.org/snapshots/缓存到本地存储库中,在codehaus-snapshots的更新间隔过去或强制更新之前,不会重新尝试解决。原始错误:无法将元数据com.github.dblock:oshi-core:3.0-snapshot/maven-metadata.xml从/传输到codehaus-snapshots(https://nexus.codehaus.org/snapshots/):nexus.codehaus.org

这是一个暂时的问题,只与特拉维斯-奇相关;一旦我实际发布了所有模块,pom设置就会很好地工作,我可以通过在本地执行MVN clean deploy将新的oshi-core推送到OSS存储库来解决这个问题,这样Travis就会很高兴了。然而,这似乎是一个糟糕的变通办法。

我是否可以告诉Travis CI使用它刚刚编译的jar而不是下载一个新的jar--并且在发布后不会破坏从存储库下载依赖项的预期方式?

共有1个答案

周锐
2023-03-14

所以,好吧,我已经对您的构建进行了更深入的研究,让我在这里总结一下我的一些想法:

我发现您已经用不同的值配置了maven-clean-plugin,这些值不是必需的,也没有优势。使用约定而不是配置范例。只有当你有很好的理由时才会违反它(老实说,我没有看到一个。也许你可以解释一下)。

您已经将maven-source-plugin配置为在默认生命周期内运行,这意味着它将与每个MVN clean packageMVN install一起运行,这通常是不必要的,因为通常只有在发布并转移到Maven Central时才需要源html" target="_blank">代码包。除此之外,您已经配置为使用maven-source-plugin的jar目标,该目标将生命周期分岔,这意味着从一开始就开始一些部分。最好去除分叉的生命周期目标。最好是只在发布运行期间添加源代码包。(请注意,您已关闭使用发布配置文件)。

为什么要将配置wagon-ssh作为扩展?这样做的目的是什么?如果要将生成的站点发布到github,那么Maven SCM发布插件会更简单、更快。

您还为maven-assembly-plugin配置了一些奇怪的属性src.relative.loc。如果您真的有一个可以重用的描述符,那么您应该研究一下关于共享描述符的文档。在父级中声明maven-assembly-plugin意味着它将对所有POM执行,包括父级,这将在构建中产生以下警告:

[INFO] --- maven-assembly-plugin:2.6:assembly (oshi-assembly) @ oshi-parent ---
[WARNING] Cannot include project artifact: com.github.dblock:oshi-parent:pom:3.0-SNAPSHOT; it doesn't have an associated file or directory.
[INFO] Building tar: /Users/kama/ws-git-so/oshi/target/oshi-parent-3.0-SNAPSHOT-oshi-assembly.tar.gz
[WARNING] Cannot include project artifact: com.github.dblock:oshi-parent:pom:3.0-SNAPSHOT; it doesn't have an associated file or directory.
[INFO] Building tar: /Users/kama/ws-git-so/oshi/target/oshi-parent-3.0-SNAPSHOT-oshi-assembly.tar.bz2
[WARNING] Cannot include project artifact: com.github.dblock:oshi-parent:pom:3.0-SNAPSHOT; it doesn't have an associated file or directory.
[INFO] Building zip: /Users/kama/ws-git-so/oshi/target/oshi-parent-3.0-SNAPSHOT-oshi-assembly.zip
[INFO]                                                                         

啊…非常重要:您正在使用目标程序集,这是不推荐的,不应该使用。使用现有的唯一一个:single没有其他。因为Assembly也会破坏生命周期,从而减慢构建速度。

更新2:我已经创建了一个公关..所以你可以更深入地研究我的建议...也许我错过了你的某些需求…

 类似资料:
  • 我有一个多模块的项目,即。 在一个开发周期中,我向Module1添加了一个类。module2中的类依赖于它。 我的本地中没有这些工件。运行此: 然而,这至少从两个方面提出了一个问题: 我必须经历较慢的安装阶段,而不是较快的编译阶段 我有同一个项目的两个版本,在这些版本中有冲突的修改。我不能用它们各自的修改运行相同的Java类,只能运行当前安装的修改,考虑到它们都是相同的快照版本 这两种方法都有解决

  • 我对maven是新手,在将pom.xml中定义的依赖项下载到本地存储库时遇到了问题。正确下载pom.xml中定义的所有其他依赖项。此外,跨多个项目的其他依赖关系也运行良好。我使用的是maven 3.5.2和aws sdk 1.11.86 导致问题的依赖项是定义为的aws红移驱动程序- Maven存储库- 我的本地回购协议有以下内容- 我已经删除了本地文件。上次更新的文件,但无法解决此问题<有什么想

  • 我试图在我的文件系统上为maven和gradle维护相同的存储库。但是我遇到了一些问题。 我的 GRADLE_USER_HOME是 我的gradle主页与我的Maven存储库相同。 但是,当通过gradle下载依赖项时,它们将被下载到gradle\u USER\u HOME\cache中,而不是存储库文件夹中。我缺少什么配置? 编辑我已经查看了《Gradle In Action》一书中关于依赖关系

  • 问题内容: 我有一个多模块项目:父POM.xml: rest-client-microservice的POM.xml如下所示: email-commons模块的POM.xml如下所示: 如果我尝试在父项目上执行,则会得到以下结果: 我已经在这个问题上困扰了好几天,但是我不知道为什么这不起作用。 问题答案: 我想到了。rest-client-microservice是一个Spring Boot项目,

  • 我有这个项目https://github.com/andreacatania/libreria 它有三个模块“deWeb”“decore”“libreriaear” 模块libreriaEar创建了一个带有deweb和decore模块的EAR存档。我试图将Hibernate使用到模块“decore”中,但maven没有将依赖项导入到“decore”模块中,因此我收到了NoClassFoundExc

  • 如上所述,我对maven有一个问题。在我当前的eclipse项目中,我使用maven进行依赖性管理,直到现在,它仍然运行良好。 该项目不再有效,并声明: 如果我检查文件夹,就会发现一些文件与jar同名,但以jar结尾。最后更新。 我尝试了maven clean和maven update,但没有成功。我的pom中的线条。xml标记为红色,表示: 这是我的pom的内容。xml: 这一块是一个有标记的块