Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在同一pom.xml中重新定义导入的Maven依赖项的范围?_Java_Maven_Dependency Management - Fatal编程技术网

Java 是否可以在同一pom.xml中重新定义导入的Maven依赖项的范围?

Java 是否可以在同一pom.xml中重新定义导入的Maven依赖项的范围?,java,maven,dependency-management,Java,Maven,Dependency Management,我在一个应用服务器环境中工作,在这个环境中,我使用bom表收集依赖项信息,如下所示: <dependency> <groupId>org.jboss.bom.eap</groupId> <artifactId>jboss-javaee-6.0-with-security</artifactId> <version>${jboss.bom.

我在一个应用服务器环境中工作,在这个环境中,我使用bom表收集依赖项信息,如下所示:

        <dependency>
            <groupId>org.jboss.bom.eap</groupId>
            <artifactId>jboss-javaee-6.0-with-security</artifactId>
            <version>${jboss.bom.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

org.jboss.bom.eap
jboss-javaee-6.0-with-security
${jboss.bom.version}
聚甲醛
进口
但是,这个特定的bom表将依赖项指定为“compile”,我希望将我的所有项目的范围限定为“provided”。但是,当我试图覆盖从中导入依赖项的同一pom中的范围时,如下所示:

        <dependency>
            <groupId>org.picketlink</groupId>
            <artifactId>picketlink-federation</artifactId>
            <scope>provided</scope>
        </dependency>

org.picketlink
picketlink联合会
假如
Maven抱怨找不到版本,或者如果我使用bom表中指定的version属性,则找不到该属性

我相当肯定这是同一pom中的import+覆盖的问题,因为我可以很好地覆盖子项目中的范围。是否有一种方法可以在单个pom中导入和覆盖范围


*以上所有代码片段都来自同一部分。

这当然是可行的:

<dependencyManagement>
   ...
   <dependency>
     <groupId>org.jboss.bom.eap</groupId>
     <artifactId>jboss-javaee-6.0-with-security</artifactId>
     <version>${jboss.bom.version}</version>
     <type>pom</type>
     <scope>import</scope>
   </dependency>
   ...
</dependencyManagement>
<dependencies>
   ...
   <dependency>
     <groupId>org.picketlink</groupId>
     <artifactId>picketlink-federation</artifactId>
     <scope>provided</scope>
   </dependency>
</dependencies>

...
org.jboss.bom.eap
jboss-javaee-6.0-with-security
${jboss.bom.version}
聚甲醛
进口
...
...
org.picketlink
picketlink联合会
假如
请记住,您需要在
部分重新定义您的作用域,在
部分重新定义而不是


如果您使用继承,您的范围覆盖当然会传播到任何子POM。

当您说“上面的所有代码片段都来自同一节”时,您的意思是说对
org.picketlink:picketlink federation
的依赖关系是在
节中声明的吗?是的,我是这样做的。问题是我在一个由几个孩子共享的家长pom中工作。我不想在每个子项中都重写,所以理想情况下,我希望在父项中重写从bom导入的范围。这不起作用,因为我需要在节中声明picketlink联合依赖项。我有几个从这个项目继承的子项目,可能需要也可能不需要那个特定的依赖项,所以把它放在这里会给我几个项目中未使用的声明依赖项。我不认为这是应该的工作方式。如果您从某个地方导入依赖项,则表示您符合他们的世界观。我不认为不覆盖每个子模块中的作用域就可以成功。也就是说,您可以创建自己的BOM表,更改它以满足您的需要,并从中继承。这个特殊的BOM表只列出了大约10个依赖项,所以它肯定是可管理的。是的。。。所以我希望有一个“最佳实践”的方法来做到这一点。该bom表只有大约10个dep,但它继承自一个具有更多dep的父级。如果可能的话,我不想参与维护这一点。毫无疑问,对于像应用服务器这样的东西,我们可以调整bom以进行一些小的配置更改,而不必重新实现整个功能……我同意。但问题是,既然您确实在定制它,那么您仍然需要维护它。对于每个新版本或升级,您都需要检查依赖项,并查看是否有任何其他依赖项的范围需要调整。恐怕这是最接近最佳实践的做法。我想我们可能会同意在这一点上存在分歧:)