类型= pom的Maven依赖

时间:2016-12-09 06:14:36

标签: maven dependencies

我在父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}宣布 如果我在root中承载jboss-javaee-7.0,则运行

2 个答案:

答案 0 :(得分:5)

此处的说明是,如果您未在<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>

因此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>

子模块现在可以使用与

相同的<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-->
     <scope>import</scope>
</dependency>

答案 1 :(得分: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

的更多信息