类型= pom的Maven依赖

Les*_*aRB -2 dependencies maven

我在父母POM中宣布

<dependencyManagement>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
            <scope>compile</scope>
        </dependency>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

此外,孩子使用pom

<dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

一切正常吗?但是当我使用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>
Run Code Online (Sandbox Code Playgroud)

我有错误

[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.
Run Code Online (Sandbox Code Playgroud)

如何使用type = pom $ {Jboss-javaee-7.0.version}声明依赖于dependencyManagement中的依赖如果我在root中承载jboss-javaee-7.0,那么运行

Nam*_*man 6

这里的澄清是,当你没有<type>在你的</dependency>内部定义</dependencyManagement>侮辱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>
Run Code Online (Sandbox Code Playgroud)

因此module使用jar时的用途

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency> 
Run Code Online (Sandbox Code Playgroud)

type依赖.默认为jar.虽然它通常表示依赖项文件名的扩展名,但情况并非总是如此.类型可以映射到不同的扩展和分类器.该类型通常对应于所使用的包装,但情况并非总是如此.一些例子是jar,war,ejb-clienttest-jar 新类型可以通过设置插件被定义extensionstrue,所以这不是一个完整的清单.


但接下来当你明确声明父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>
Run Code Online (Sandbox Code Playgroud)

子模块现在要么可以继承具有相同的依赖<type>作为

<dependency>
     <groupId>org.jboss.spec</groupId>
     <artifactId>jboss-javaee-7.0</artifactId>
     <type>pom</type><!--inherited-->
</dependency>
Run Code Online (Sandbox Code Playgroud)

或者如果你想利用不同的项目的jar <type>,你可以明确地提到依赖关系:

<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-->
     <scope>import</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)