【问题标题】:Maven dependency: import cannot be resolved but is present in local repository (Eclipse Oomph Unzip Setup Task)Maven 依赖项:无法解析导入,但存在于本地存储库中(Eclipse Oomph 解压缩设置任务)
【发布时间】:2021-02-15 03:04:28
【问题描述】:

我在使用 Maven 时遇到问题。 来自 Eclipse Oomph 的 Unzip Setup Task 存储库 (https://github.com/maybeec/oomph-task-unzip) 的子模块“task-unzip”的 Maven mvn clean 包在多个机器/设置上失败并出现以下错误:

[INFO] --- tycho-compiler-plugin:0.22.0:compile (default-compile) @ com.github.maybeec.oomph.task.unzip ---
[INFO] Compiling 13 source files to C:\FOLDER\repositories\oomph-task-unzip\task-unzip\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26.983 s
[INFO] Finished at: 2020-10-28T18:35:49+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.eclipse.tycho:tycho-compiler-plugin:0.22.0:compile (default-compile) on project com.github.maybeec.oomph.task.unzip: Compilation failure: Compilation failure:
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[7]
[ERROR] import org.apache.commons.compress.archivers.ArchiveEntry;
[ERROR] ^^^^^^^^^^^^^^^^^^
[ERROR] The import org.apache.commons cannot be resolved
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[8]
[ERROR] import org.apache.commons.compress.archivers.ArchiveInputStream;
[ERROR] ^^^^^^^^^^^^^^^^^^
[ERROR] The import org.apache.commons cannot be resolved
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[9]
[ERROR] import org.apache.commons.compress.archivers.ArchiveStreamFactory;
[ERROR] ^^^^^^^^^^^^^^^^^^
[ERROR] The import org.apache.commons cannot be resolved
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[10]
[ERROR] import org.apache.commons.compress.compressors.CompressorInputStream;
[ERROR] ^^^^^^^^^^^^^^^^^^
[ERROR] The import org.apache.commons cannot be resolved
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[11]
[ERROR] import org.apache.commons.compress.compressors.CompressorStreamFactory;
[ERROR] ^^^^^^^^^^^^^^^^^^
[ERROR] The import org.apache.commons cannot be resolved
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[12]
[ERROR] import org.apache.commons.compress.utils.IOUtils;
[ERROR] ^^^^^^^^^^^^^^^^^^
[ERROR] The import org.apache.commons cannot be resolved
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[47]
[ERROR] CompressorInputStream cIS = new CompressorStreamFactory().createCompressorInputStream(in);
[ERROR] ^^^^^^^^^^^^^^^^^^^^^
[ERROR] CompressorInputStream cannot be resolved to a type
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[47]
[ERROR] CompressorInputStream cIS = new CompressorStreamFactory().createCompressorInputStream(in);
[ERROR] ^^^^^^^^^^^^^^^^^^^^^^^
[ERROR] CompressorStreamFactory cannot be resolved to a type
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[64]
[ERROR] ArchiveInputStream archiveIS = new ArchiveStreamFactory().createArchiveInputStream(fileIS);
[ERROR] ^^^^^^^^^^^^^^^^^^
[ERROR] ArchiveInputStream cannot be resolved to a type
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[64]
[ERROR] ArchiveInputStream archiveIS = new ArchiveStreamFactory().createArchiveInputStream(fileIS);
[ERROR] ^^^^^^^^^^^^^^^^^^^^
[ERROR] ArchiveStreamFactory cannot be resolved to a type
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[65]
[ERROR] ArchiveEntry entry;
[ERROR] ^^^^^^^^^^^^
[ERROR] ArchiveEntry cannot be resolved to a type
[ERROR] C:\FOLDER\repositories\oomph-task-unzip\task-unzip\src\com\github\maybeec\oomph\task\unzip\core\impl\UnzipUtilImpl.java:[77]
[ERROR] IOUtils.copy(archiveIS, out);
[ERROR] ^^^^^^^
[ERROR] IOUtils cannot be resolved
[ERROR] 12 problems (12 errors)
[ERROR] -> [Help 1]

Maven 实际上正在将 Apache commons-compress-1.19.jar 下载到本地 Maven 存储库,并且它也被复制到项目的 lib 文件夹中。所以这是可行的,并且依赖关系实际上存在于文件系统上。 但是,Maven 找不到这种依赖关系。手动将其添加到项目中,可以解决解决失败,但这并不能解决它不适用于 Maven 的问题。

在 Eclipse 中导入子模块显示相同。 Eclipse 无法自动完成对“org.apache.commons.*”的“import”语句:

该子模块的属性 > 构建路径不显示任何 Maven 依赖项(实际上“Maven 依赖项”列表甚至都不存在!我必须关注 https://stackoverflow.com/a/27337064/5446400 并为此编辑 .classpath 文件)。但是它仍然是空的:

在这个问题上搜索和工作了几个小时,我无法解释为什么 Maven 的行为方式如此。 感谢大家的支持!

【问题讨论】:

  • 这看起来像一个 Eclipse 插件。对于插件依赖项只能在目标平台或工作区中,并且会显示在“插件依赖项”部分中

标签: eclipse maven import maven-dependency oomph


【解决方案1】:

不应将 Maven 依赖项添加到 Eclipse 插件的构建路径中。插件依赖就足够了,在这种情况下,commons-compress-1.19.jar 将作为库从插件的 lib 目录中加载(这在 build.properties 文件中定义),而不是直接作为 Maven 依赖。

我不确定下载 Maven 依赖项并在同一个构建中使用它是否会以这种方式工作。如果它被复制到正确的位置,您可能只需要刷新工作区,否则 jar 可能会在 Eclipse 构建中被忽略。

为了调试问题,我可能会下载工件并将 jar 手动放置在 lib 目录中一次,然后放弃自动化过程。然后至少你会看到这种对 Maven 依赖项的不寻常处理是问题还是其他原因。

【讨论】:

  • 谢谢你,你是在正确的轨道上。原因是 maven 依赖已升级到 .pom 中的 commons-compress-1.19.jar,而 build.properties 和 MANIFEST.MF 中仍然有 commons-compress-1.12。该存储库使用 Eclipse Tycho 进行构建。我不知道是否有办法使 MANIFEST 文件更具动态性,例如如果图书馆的版本在这种情况下发生变化。但是 build.properties 不是问题(只需从“lib”文件夹复制所有内容,而不是包含名称中的版本的特定 jar)。
猜你喜欢
  • 1970-01-01
  • 2012-05-14
  • 2017-03-03
  • 2021-12-25
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多