Maven依赖项类型为pom的含义是什么?

5

我在父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>

所有工作正常吗?但是当我使用类型为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.

如何在dependencyManagement中声明类型为pom的依赖项 声明$ {Jboss-javaee-7.0.version} 如果我在根目录下使用jboss-javaee-7.0,则运行。
2个回答

12

需要澄清的是,当您在</dependencyManagement> 中的 </dependency> 上未定义 <type> 时,它会默认为 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>

因此,在使用它时,模块会使用那个jar文件。

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

依赖的类型。默认为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>

现在子模块可以继承具有相同<type> 的依赖项

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

如果您想使用项目中不同的 <type> 的 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>

您可以获取有关导入依赖项的更多信息,请查看导入依赖项

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接