1

我有一个导入到 Eclipse 中的 Maven Web 项目。我有另一个 web 项目依赖的 maven 项目(生成一个 jar 文件)。

从命令行执行时,这两个项目都可以正常工作。mvn 包创建一个 war 文件,该文件从 web 项目的 maven 存储库中提取它所依赖的 jar。mvn package 在为库运行时会创建一个有效的 jar 文件。

当我将库导入 Eclipse 时,m2e 识别出 Web 项目依赖于库并更新项目的一部分以利用两个 maven 项目都托管在单个 Eclipse 工作区中这一事实。Web 项目的“Java 构建路径”首选项的“库”选项卡的“Maven 依赖项”部分会删除库 jar 文件并将其替换为库项目。随着库在 Eclipse 中更新,Web 项目无需安装/部署库即可识别这些更改。

当我尝试在 Eclipse 中运行 Web 应用程序时会出现问题。因为 Eclipse 实际上是针对 Eclipse 中的库版本构建 Web 项目,所以它不会从 maven 存储库部署库文件,它会创建一个新的 jar 文件,它是 Eclipse 中库的当前版本的快照。所有这一切对我来说通常都很有效,但是在我目前正在处理的项目中,Eclipse 正在创建的 jar 文件存在问题。它似乎没有插入库的类文件,而是使用了我的 Maven 项目的“src”目录并将其压缩为 jar 文件。jar 文件的内容类似于:

-main
  -java
    -com
      -... *.java
  -resources
    -...
-test
  -java
    -com
      -... *.java

我希望它看起来更像:

-com
  -... *.class

由于我之前已经成功使用过这种类型的项目,所以我试图弄清楚是否需要配置一些东西,或者我是否刚刚遇到了错误。

我在 Eclipse Indigo(内部版本号:20120216-1857)上使用 m2e 的最新更新(1.0.200.20111228-1245)。

4

2 回答 2

3

在 Eclipse 中,我们可以禁用“ Workspace Resolution ”,以便它直接从本地 maven 存储库中使用我们的依赖项,步骤如下:-

禁用工作区分辨率

  1. 右键单击eclipse里面的项目
  2. 从上下文菜单中选择“Maven”。
  3. 如果显示“禁用工作区分辨率”,则表示已启用。我们点击它是为了禁用它。请注意,之后它将显示“启用工作区分辨率”,这意味着我们已经禁用。

我们可能需要按照以下步骤更新项目配置和其他相关依赖项:-

更新项目配置

  1. 右键单击eclipse里面的项目
  2. 从上下文菜单中选择“Maven”。
  3. 单击“更新项目配置...
  4. 将显示“更新 Maven 依赖项”窗口。
  5. 选择所需的项目,然后单击“确定”。

更新依赖

  1. 右键单击eclipse里面的项目
  2. 从上下文菜单中选择“Maven”。
  3. 单击“*更新依赖项”
  4. 将显示“更新 Maven 依赖项”窗口。
  5. 选择所需的项目,然后单击“确定”。

请注意,由于我们不再直接从工作区使用相关依赖项,它将直接从我们本地的 maven 存储库中使用。然后应该使用以下命令行将所有相关工件安装到我们的本地 maven 存储库中。

mvn 安装

无论如何,它可以通过使用 Eclipse 中的上下文菜单来完成,步骤如下:-

  1. 右键单击eclipse里面的项目
  2. 选择“运行方式”--->“ Maven 安装”。
于 2012-03-15T01:57:04.437 回答
3

这是我想出的解决方案。

在我的情况下,似乎仍然遵循库项目的“部署程序集”规则。

要更改它,请转到库属性->部署程序集

在我的情况下,它只包含来自“/src”->“/”的映射。我删除了该条目并将其替换为来自“/target/classes”->“/”和“/src/main/resources”->“/”的映射。

一旦我有了那个映射,当 jar 文件被部署时,它就包含了我在部署程序集中配置的内容。这允许 Eclipse 继续使用,而无需为每次更改显式重新发布库。但是,当库更新时,它似乎不会自动重新部署到 tomcat ——我仍然需要手动重新启动 tomcat 以反映库更改。

我仍然不完全清楚这个项目发生了什么。我之前确实有具有类似结构的项目,并且在这些项目中,部署程序集尚未更新为明确包含类文件,但仍部署了正确的 jar 文件。

于 2012-03-15T06:05:11.143 回答