【问题标题】:Dependency scoped "compile" not included in assembly程序集中不包含依赖范围的“编译”
【发布时间】:2011-03-01 13:45:49
【问题描述】:

我在项目的 POM 中指定了以下依赖项:

 <dependency>
  <groupId>org.jboss.client</groupId>
  <artifactId>jbossall-client</artifactId>
  <scope>compile</scope>
 </dependency>

我的项目本身必须是另一个 POM 的子项目。在那一个中​​,定义了以下内容:

<dependency>
   <groupId>org.jboss.client</groupId>
   <artifactId>jbossall-client</artifactId>
   <version>4.2.3.GA</version>
   <scope>provided</scope>
   <type>jar</type>
</dependency>

当我现在组装我的程序时,似乎父 POM 的“提供”范围覆盖了我的项目范围,因为 jbossall-client.jar 不包含在我的程序集中。虽然对我来说似乎不合逻辑,但也许是this feature在这里生效。

你知道在我的程序集中包含依赖项而不接触父 POM 的方法吗?


编辑: mvn dependency-tree 的输出(更新!):

[dependency:tree]
com.myproject:myproject:jar:0.0.1-SNAPSHOT
+- com.myproject-commons:jar:1.0-SNAPSHOT:compile
|  +- commons-logging:commons-logging:jar:1.0.4:compile
|  +- log4j:log4j:jar:1.2.14:compile
|  +- sv.seucc:seucc-unicode:jar:1.0.1.5:compile
|  +- commons-lang:commons-lang:jar:2.2:compile
|  +- com.thoughtworks.xstream:xstream:jar:1.2.1:compile
|  \- xpp3:xpp3_min:jar:1.1.3.4.O:compile
+- com.myproject-interfaces2:jar:1.0-SNAPSHOT:compile
|  \- com.myproject-service-commons:jar:1.0-SNAPSHOT:compile
+- org.springframework:spring:jar:2.5.6:compile
+- commons-io:commons-io:jar:1.3.1:compile
+- com.myproject-modules:ejb:1.0-SNAPSHOT:compile
\- org.jboss.client:jbossall-client:jar:4.2.3.GA:compile

编辑 2: 这里是我的程序集 XML 的依赖部分。

 <dependencySets>
  <dependencySet>
   <outputDirectory>lib</outputDirectory>
  </dependencySet>
 </dependencySets>

编辑3:这是我获得的程序集的lib文件夹中的文件。

commons-io-1.3.1.jar
commons-lang-2.2.jar
commons-logging-1.0.4.jar
log4j-1.2.14.jar
seucc-unicode-1.0.1.5.jar
spring-2.5.6.jar
xpp3_min-1.1.3.4.O.jar
xstream-1.2.1.jar
myproject-commons-1.0-SNAPSHOT.jar
myproject-modules-1.0-SNAPSHOT.jar
myproject-service-commons-1.0-SNAPSHOT.jar
myproject-interfaces2-1.0-SNAPSHOT.jar
myproject-0.0.1-SNAPSHOT.jar

编辑 4:有关此问题的答案,请参阅正确答案的最终 cmets。

【问题讨论】:

    标签: maven-2 scope dependencies maven-assembly-plugin


    【解决方案1】:

    两个依赖项没有相同的groupId,因此这里没有任何内容被覆盖,它们被视为不同的工件。但我想知道你的孩子 pom 是如何工作的(因为jbossall-client 没有任何版本)。你有dependencyManagement 部分吗?

    无论如何,要“调试”此类问题,请在您的子项目中使用mvn dependency:tree(如果您需要更多帮助,请发布输出)。


    更新:以上是我对最初问题的回答,并不反映问题的当前状态。

    为了清楚起见,最终解决方案的关键是在程序集描述符的dependencySet 元素中声明一个&lt;scope&gt;compile&lt;/scope&gt;(默认为runtime)。有关所有详细信息,请参阅 cmets。

    另见

    【讨论】:

    • 当我从我的子 pom 中的 jbossall-client 中删除 &lt;scope&gt; 标签,然后签入 Eclipse -> Dependency Hierachy 时,jbossall-client 的范围被标记为 provided。因此我假设它从它的父级继承 &lt;scope&gt; 值。我在其中一个 poms 中没有找到任何 dependencyManagement 部分。我还能在哪里寻找?我已将mvn dependency:tree 的输出附加到我的原始帖子中。请参见上文。
    • @BernhardV:你很可能继承了它,但不是从你认为的地方继承的。正如我所说,您显示的依赖项不具有相同的groupId,并且您可以看到,您获得的是版本 4.2.3,而不是 4.2.2。无论如何,依赖关系树看起来不错,并且 jbossall-client 存在编译范围。一定是哪里出了问题。你能显示你的程序集描述符的内容和获得的程序集的内容吗?实际上,允许复制的简化 pom 会很好。
    • 我发现我从哪里继承了 jbossall-client.jar。在我的 Eclipse 工作区中,我检查了父 pom 的旧版本,而不是在子 pom 中指定的版本。我已经更正了我的第一篇文章,现在 groupId 是相同的。我也必须指定版本。现在奇怪的是,它包含在我的程序集中,尽管我没有提供&lt;scope&gt; 标签。 :-\我不确定我是否应该对此感到高兴。
    • 原来我的孩子pom中没有更新父母的pom版本。现在我遇到了和开始时一样的问题。在父级中提供了范围,但在子级中,范围是编译的。但似乎父母会覆盖孩子,因为它不包含在我的程序集中。 :-(
    • 我现在已将我的程序集描述符和 lib 目录中的文件添加到我的条目帖子中。
    【解决方案2】:

    我们遇到了同样的问题,并通过添加第二个提供的范围依赖集解决了这个问题,但这只在我们升级到程序集插件的 2.2.1 版本后才有效。

    【讨论】:

      猜你喜欢
      • 2012-11-11
      • 2017-08-04
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      相关资源
      最近更新 更多