Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
对Maven使用可传递依赖项和排除项_Maven - Fatal编程技术网

对Maven使用可传递依赖项和排除项

对Maven使用可传递依赖项和排除项,maven,Maven,我有一个专业的等级制度: sim-java ejb web log4j ... ejb、web和log4j是sim java的模块,每个模块都通过父标记引用sim java 我想创建一个log4j模块,并将其作为依赖项包含在simjava中,这样log4j将作为依赖项出现在ejb和web模块中 基本上,sim java中的my pom.xml包含以下内容: <dependencies> <dependency> <g

我有一个专业的等级制度:

sim-java
   ejb
   web
   log4j
   ...
ejb、web和log4j是sim java的模块,每个模块都通过父标记引用sim java

我想创建一个log4j模块,并将其作为依赖项包含在simjava中,这样log4j将作为依赖项出现在ejb和web模块中

基本上,sim java中的my pom.xml包含以下内容:

<dependencies>
    <dependency>
        <groupId>com.sim</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

com.sim
log4j
${log4j.version}
假如
(提供范围是因为我有一个ear模块,它将在ear文件中包含com.sim:log4j)

现在,log4j模块中的pom.xml是:

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

log4j
log4j
1.2.17
我有以下生成错误:

12月30日18:56:07 CET:log4j的构建错误;org.apache.maven.lifecycle.LifecycleExecutionException:无法对项目log4j执行目标:无法解析项目com的依赖项。sim:log4j:jar:0.0.1-SNAPSHOT:找不到工件com.sim:log4j:jar:0.0.1-SNAPSHOT

我认为由于sim java使用com.sim.log4j作为可传递依赖项,因此存在一些依赖项问题,因此我在log4j pom.xml中测试了这一点:

    <dependencies>
    <dependency>
        <groupId>com.sim</groupId>
        <artifactId>sim-java</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <groupId>com.sim</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

com.sim
模拟java
0.0.1-快照
com.sim
log4j
log4j
log4j
1.2.17
2012年10月30日18:59:22 CET:[警告]com.sim:log4j:jar:0.0.1-SNAPSHOT的POM丢失,没有可用的依赖项信息 2012年10月30日18:59:22 CET:缺少工件com.sim:log4j:jar:0.0.1-快照:已提供 2012年10月30日18:59:22 CET:缺少工件com.sim:log4j:jar:0.0.1-快照:已提供 2012年10月30日18:59:22 CET:缺少工件com.sim:log4j:jar:0.0.1-快照:已提供

也许在模块(ejb、web等)中包含com.sim.log4j会起作用,但我想通过SimJava项目使用可传递的依赖关系

请问怎么做


Olivier

您不能在父pom中依赖于
com.sim:log4j
。这种依赖关系将在子项中继承,这意味着
com.sim:log4j
将依赖于自身

相反,在父pom中创建一个
,然后在需要它的子pom中声明使用
com.sim:log4j
,这里是
web
ejb

父pom:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.sim</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

com.sim
log4j
${log4j.version}
假如
Web和Ejb pom:

<dependencies>
    <dependency>
        <groupId>com.sim</groupId>
        <artifactId>log4j</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

com.sim
log4j
假如

编辑


通过只依赖ejb项目中的log4j模块,您仍然可以拥有可传递的依赖关系。然后,web项目将依赖于ejb项目,而log4j将是一个可传递的依赖项。

好的,我怀疑这种行为。这意味着我必须在所有模块中手动包含依赖项?ThxI增加了一个编辑部分。我怀疑您的web模块依赖于ejb模块。因此,如果ejb模块依赖于log4j模块,那么它将是web模块中的一个可传递依赖。感谢您的编辑,我现在已经很好地理解了依赖关系。当做