【问题标题】:maven resolves dependecy but cannot find package/classes in itmaven 解决依赖但在其中找不到包/类
【发布时间】:2012-04-24 18:15:46
【问题描述】:

在自定义 geotools 平台编译(实际上是基于 OSGi)中,当我尝试单独构建其中一个模块时,它可以正确编译。但是当我构建整个项目时 - 它在compile 阶段失败,原因是它找不到某些包/类。但是,依赖关系得到了很好的解决。

这是来自模块 pom.xml 的依赖:

<dependency>
   <groupId>org.picocontainer</groupId>
   <artifactId>com.springsource.org.picocontainer</artifactId>
   <version>1.2.0</version>
</dependency>

maven构建错误部分:

...\geotools-osgi\modules\extension\xsd\xsd-core\src\main\java\org\geotools\xs\bindings\XSGroupBinding.java:[19,24] 包 org.picocon 容器不存在

...\geotools-osgi\modules\extension\xsd\xsd-core\src\main\java\org\geotools\xml\AbstractComplexBinding.java:[20,24] 包 org.picocon 容器不存在

...\geotools-osgi\modules\extension\xsd\xsd-core\src\main\java\org\geotools\xml\ComplexBinding.java:[21,24] 包 org.picocontainer 不存在

如果我更改 pom.xml 依赖项 - 它会因某种“无法解析捆绑包”而失败。

这个项目真的很大,而且捆绑包和子/父 pom 的数量很多。所以我不能把它们都发在这里。 所以我的问题是:这种麻烦的可能原因是什么?会不会是父子之间的依赖冲突?

【问题讨论】:

  • 我不认为这可能是由父子关系引起的,因为无论你是只构建这个模块还是整个项目,类路径都是一样的。尝试使用-X 调试选项执行构建,它可能会有所启发。附: org.picocon tainer这是一个错字吗?
  • 是的,这是格式相关的错字,抱歉。

标签: maven dependencies osgi


【解决方案1】:

我可以看到两件事来尝试解决它。​​

首先,如果您进入本地 .m2 存储库,您会看到是否有其他版本的 lib(但是,有时不同的版本可以有不同的名称,因此存储在不同的文件夹中,这不会帮助)

您还可以在 IDE 或命令行中检查所使用的 ACTUAL 依赖项是什么(mvn dependency:tree)。 您可能必须排除一些传递依赖以保持一致。我为此使用了 Eclipse 插件。

最后,当你确定你使用的依赖时,你可以打开 jar 看看你期望的是否存在。

【讨论】:

  • 感谢您的快速回复。正如你所建议的,我做了一个依赖检查mvn dependency:tree,它没有显示任何错误 - 构建成功。 Thec 通过关键字picocontainer 在文件夹 .m2/repository 中搜索仅显示一个 .jar - 正是我需要的那个,而且它不是空的 - 它包含我需要的所有必要的包和类。
  • 您的 IDE 是否成功编译了您的代码?您使用哪个 IDE?
【解决方案2】:

嗯,实际原因是目标计算机对互联网的访问受到限制,因此对 maven 存储库的访问受到限制。有了一些黑魔法,它并没有因为某种“无法下载工件”而失败(可能是因为手动安装了一些 jar 文件)。 因此,我们获得了具有正常访问权限的服务器,将其设置为镜像,配置我们的 maven 以使用镜像,从而解决了问题。 感谢@Samuel 参与我的问题,但我可以看到无法从问题描述中确定问题。

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。在我的情况下,模块中的所有类都在测试包中(它是 Selenium 项目)并且依赖项设置为编译。我最终将一些类移动到主包。

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题。我的问题是依赖项被设置为测试。所以当我发出 exec:java 时,它找不到该类,因为它超出了范围。

      【讨论】:

        【解决方案5】:

        我已经用 Eclipse 解决了这个问题。当您在项目中展开“maven 依赖项”文件夹并尝试找到您所指的特定 jar 时,您可以发现此问题。 jar 可能以文件夹的形式出现,但不是实际的 jar。被引用项目的原因是在 Eclipse 平台中打开,因此 Maven 不会在存储库中查找以获取该 jar。

        解决方法是从 Eclipse 解决方案空间中删除引用 jar 的项目并重建。有用!

        【讨论】:

          猜你喜欢
          • 2019-02-20
          • 2018-11-03
          • 1970-01-01
          • 2011-04-01
          • 2023-03-20
          • 1970-01-01
          • 2017-10-28
          • 2023-03-30
          相关资源
          最近更新 更多