【问题标题】:Maven build from CLI fails but succeeds from Eclipse从 CLI 构建 Maven 失败但从 Eclipse 成功
【发布时间】:2021-07-05 19:35:31
【问题描述】:

在 Eclipse 中,我可以通过以下步骤构建我的项目:

  1. 从 github 克隆项目
  2. Maven -> 更新项目启用以下设置
  • “更新依赖关系”
  • “从 pom.xml 更新项目配置”
  • “从本地文件系统刷新工作空间资源”
  • “清理项目”
  1. 运行方式 -> Maven 安装 构建成功。

现在我想通过 CLI 做同样的事情。

  1. 我不知道完全复制 eclipse 中的步骤需要哪些参数,我尝试了以下方法
  • mvn clean
  • mvn 依赖:解决
  • mvn eclipse:eclipse
  1. mvn install -U

安装失败,出现很多关于不存在的包的错误(参见下面的示例)。这通常在 eclipse 程序的第 2 步中完成。当我在 Eclipse 中执行此步骤并运行 mvn install 时,它就可以工作了。

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/projects/git/mypackage/src/mypackage/myfile.java:[13,10] package ij does not exist

我想我使用了错误的 CLI 命令。有人知道我应该使用哪个吗?

-- 编辑--

包含对 ij.jar 引用的唯一文件是 MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Tasks
Bundle-SymbolicName: mypackage
Bundle-Version: 1.0.0.qualifier
Bundle-ClassPath: mypackage.jar,
 lib/ij.jar

文件 ij.jar 位于 lib 文件夹中。

上面的错误确实是第一个错误。其他错误类似,所以我没有全部复制。

mvn install -U 从 CLI 的输出与在 Eclipse 中使用 Update 项目后跟 Run as -> Maven install 后的控制台输出相比的差异是

[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< mypakcage >----------------
[INFO] Building mypackage 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mypackage ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 12 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ mypackage ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 202 source files to C:\projects\eclipse\mypackage\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/projects/git/mypackage/src/mypackage/myfile.java:[13,10] package ij does not exist

[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------< mypackage:mypackage >----------------
[INFO] Building mypackage 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mypackage ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 12 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ mypackage ---
[INFO] Nothing to compile - all classes are up to date

一旦构建尝试编译 mypackage,就会发生错误。

【问题讨论】:

  • 会有很多我们在这里看不到的信息可能会有所帮助。我将首先比较 Eclipse 中的“mvn install -U”和 shell 内容之间的整个控制台内容。该编译错误是您在输出中看到的第一个错误吗? “ij”包是来自依赖还是来自本地源?
  • 感谢您的回复。我在 --edit-- 标记之后添加了原始帖子中缺少的信息。
  • 永远不要打电话给mvn eclipse:eclipse。这可能会破坏您的项目。只需拨打mvn clean install即可。
  • 我尝试了几种组合。不幸的是 mvn clean install 给出了同样的错误。

标签: java eclipse maven command-line


【解决方案1】:

我真的很惊讶从 Eclipse 构建的工作。这里的关键是指定“ij”依赖项的奇怪方式。 Maven 项目在 pom.xml 中指定其依赖项,通常通过典型的声明性 GAV 规范,但实际上可以指定对本地 jar 的依赖项,尽管不建议这样做。如果无法为“ij”指定常规 GAV 依赖项,则需要指定本地 jar 依赖项。

关键是使用“system”范围的“systemPath”元素。以下 StackOverflow 线程中对此进行了讨论:build maven project with propriatery libraries included

您还可以阅读官方 Maven 文档中的“systemPath”元素:https://maven.apache.org/pom.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 2022-12-16
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2012-01-24
    • 2012-08-30
    • 2011-09-27
    相关资源
    最近更新 更多