【问题标题】:Maven dependency with type = pom类型为 pom 的 Maven 依赖项
【发布时间】:2021-03-15 11:29:51
【问题描述】:

我在父 POM 中声明

<dependencyManagement>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
            <scope>compile</scope>
        </dependency>
</dependencyManagement>

进一步,子pom使用

<dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
</dependencies>

一切正常吗?但是当我将这种依赖项与 type = pom

一起使用时
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.spec</groupId>
                <artifactId>jboss-javaee-7.0</artifactId>
                <version>${jboss-javaee-7.0.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
</dependencyManagement>

我有错误

[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project by.services:by.utils:1.0.2 (D:\Work\V2_Change_Maven_Structure\by.utils\pom.xml) has 1 error
[ERROR]     'dependencies.dependency.version' for org.jboss.spec:jboss-javaee-7.0:jar is missing. @ line 18, column 21
[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.

如何使用 type = pom 在dependencyManagement 中声明依赖项 $ {Jboss-javaee-7.0.version} 宣布 如果我在根目录下承载 jboss-javaee-7.0,则运行

【问题讨论】:

    标签: maven dependencies


    【解决方案1】:

    这里需要澄清的是,当您没有在 &lt;/dependency&gt; 内的 &lt;/dependencyManagement&gt; 中定义 &lt;type&gt; 时,它将默认为 jar

    <dependencyManagement>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
            <scope>compile</scope>
            <type>jar<type> <!--default value-->
        </dependency>
    </dependencyManagement>
    

    因此module 使用该 jar 时将其用作

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency> 
    

    依赖的type。默认为jar。虽然它通常 表示依赖项文件名的扩展名,但并非总是如此。一个类型可以映射到不同的扩展和分类器。类型通常与使用的包装相对应,但也并非总是如此。 一些例子是jarwarejb-clienttest-jar 新类型可以由将extensions 设置为true 的插件定义,所以这不是一个完整的列表。


    但是接下来当你显式声明父 pom 的类型为

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.spec</groupId>
                <artifactId>jboss-javaee-7.0</artifactId>
                <version>${jboss-javaee-7.0.version}</version>
                <type>pom</type><!--override the default value-->
                <scope>import</scope>
            </dependency>
    </dependencyManagement>
    

    子模块现在可以继承具有相同 &lt;type&gt; 的依赖项

    <dependency>
         <groupId>org.jboss.spec</groupId>
         <artifactId>jboss-javaee-7.0</artifactId>
         <type>pom</type><!--inherited-->
    </dependency>
    

    或者,如果您想使用不同 &lt;type&gt; 的项目 jar,您可以明确提及依赖项:

    <dependency>
         <groupId>org.jboss.spec</groupId>
         <artifactId>jboss-javaee-7.0</artifactId>
         <version>${jboss-javaee-7.0.version}</version>
         <type>jar</type> <!--different from parent-->
    </dependency>
    

    【讨论】:

      【解决方案2】:

      您正在尝试在您的子项目中导入jboss-javaee-7.0 jar,没有这样的 jar,它是您已经在父项目中导入的 pom 类型。

      您需要在子项目中导入 jboss-javaee-7.0 的依赖项,例如。

      <dependency>
          <groupId>org.jboss.spec.javax.ws.rs</groupId>
          <artifactId>jboss-jaxrs-api_2.0_spec</artifactId>
      </dependency>
      

      您可以获取更多关于importing dependencies的信息

      【讨论】:

        猜你喜欢
        • 2016-12-18
        • 1970-01-01
        • 2022-12-06
        • 2012-05-28
        • 2023-02-14
        • 1970-01-01
        • 2013-12-22
        • 2020-04-09
        • 1970-01-01
        相关资源
        最近更新 更多