微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何确保Maven从父lib文件夹中获取jar并忽略子模块?

如何解决如何确保Maven从父lib文件夹中获取jar并忽略子模块?

我的项目结构如下:

- app
  - app-repo
  - app-service
  - app-controller
  - lib (custom jar placed here)
  - pom.xml (parent pom)

我的父pom包括子模块和存储库位置,以从 lib 文件夹中获取jar

    <repositories>
        <repository>
            <id>in-project</id>
            <name>In Project Repo</name>
            <url>file://${main.basedir}/lib</url>
        </repository>
    </repositories>
    
    <modules>
        <module>app-repo</module>
        <module>app-service</module>
        <module>app-controller</module>
    </modules>

    <properties>
        <main.basedir>${project.basedir}</main.basedir>
        <jar.version>1.7</jar.version>
        <release.version>1.0-SNAPSHOT</release.version>
    </properties>

    <dependencies>
        <dependency>  <!-- jar file located in lib folder -->
            <groupId>com.custom</groupId>
            <artifactId>custom-core</artifactId>
            <version>${jar.version}</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

我的Maven构建顺序:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] app                                                [pom]
[INFO] app-repo                                           [jar]
[INFO] app-service                                        [jar]
[INFO] app-controller                                     [jar]

,构建 app-repo 时失败,并显示错误

Failure to find com.custom:custom-core:jar:1.7 in
file://C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\My_APP\app-repo/lib was cached in the local repository

我发现maven在子模块构建期间从父pom继承了 <repositories> ,因此 <url>file://${main.basedir}/lib</url> 导致maven查找应用-repo / lib并遇到错误

所以我想知道处理这种情况的最佳实践是什么?

  1. 如何确保Maven始终从 lib 文件夹中获取jar并忽略子模块?
  2. 父pom.xml的正确/最佳配置是什么?

我尝试将<url>file://${project.parent.basedir}/lib</url>添加到a​​pp-repo中的子pom.xml中,如下所示:

    <repositories>
        <repository>
            <id>in-project</id>
            <name>In Project Repo</name>
            <url>file://${project.parent.basedir}/lib</url>
        </repository>
    </repositories>

    <properties>
        <main.basedir>${project.parent.basedir}</main.basedir>
    </properties>

但两者似乎都无法引用父文件夹并在错误下方出现

Failure to find com.custom:custom-core:jar:1.7 in
file://${project.parent.basedir}/lib was cached in the local repository

解决方法

从伍德卓克(J Woodchuck)得到提示后,我可以从here找到答案

从3.0.4版本开始,${parent.basedir}不再可用,因此子级中的pom.xml需要像这样才能使其能够引用父项目目录:

<main.basedir>${project.basedir}${file.separator}..</main.basedir>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。