【问题标题】:Manually installed maven dependencies not visible in Eclipse import手动安装的 Maven 依赖项在 Eclipse 导入中不可见
【发布时间】:2014-06-06 17:15:44
【问题描述】:

我已经使用下面的命令安装了 maven 依赖项

mvn install:install-file  -Dfile=d2_lib.war   -DgroupId=com.emc.d2fs -DartifactId=d2_lib  -Dversion=1.0  -Dpackaging=war -DlocalRepositoryPath="C:\Users\kumarr23\.m2\repository"

我已经在我的根 pom.xml 中添加了这个依赖项,如下所示

 <dependency>
            <groupId>com.emc.d2fs</groupId>
            <artifactId>d2_lib</artifactId>
            <version>1.0</version>
            <type>war</type>
            <scope>runtime</scope>

        </dependency>

我可以看到当我在最后一场战争中安装 jars 时, 当我尝试从 Eclipse 导入这些类时,这些类不包括在内,我缺少什么吗?

我是 Maven 新手,我被困在这里! 请指教

【问题讨论】:

  • 如果你执行mvn dependency:tree,d2_lib.war 会出现吗,它的传递依赖是什么?
  • 我看到它进入了树,我使用命令行运行了命令。我没有看到任何传递依赖

标签: java eclipse maven import dependency-injection


【解决方案1】:

请检查您在运行命令的位置是否有 d2_lib.war 文件,或者在命令中提及 d2_lib.war 的完整路径并重试,我相信您指定的命令不会复制战争文件,因为没有正确定义war文件路径,您可以通过检查war文件是否复制到本地maven存储库来确认这一点

mvn install:install-file -Dfile=d2_lib.war -DgroupId=com.emc.d2fs -DartifactId=d2_lib -Dversion=1.0 -Dpackaging=war -DlocalRepositoryPath="C:\Users \kumarr23.m2\repository"

【讨论】:

  • 我在 .m2 缓存中看到了 war 文件,它被复制了。
  • 是的,我应该从 eclipse 工作区做任何其他事情来让这个库可见吗?
  • 在不指定命令的-DlocalRepositoryPath="C:\Users\kumarr23\.m2\repository"的情况下尝试安装,让它自己找到本地maven仓库。
  • 如果您使用的是Maven插件,您可以更新项目..通常它应该自己承担依赖,检查我们的项目是否正确构建
  • 刚才我在本地 m/c 上尝试过,它对我来说工作正常,使用 maven 插件我运行 install:install-file -Dfile=C:\Users\temp\d2_lib.war -DgroupId=com.emc.d2fs -DartifactId=d2_lib -Dversion=1.0 -Dpackaging=war 这个命令和添加的依赖它没有给我任何问题
【解决方案2】:

在 maven 中有一个约定,Java 代码位于 .jar 文件中,而 Web 类位于 .war 文件中。当您在 Web 项目中包含 war 类型的依赖项时,maven 会将包含的文件视为 overlay。这基本上意味着 maven 会将依赖项的内容打包到您的 war 文件中,但是它不会按照您正在寻找的方式将该 war 中的库作为 java 代码包含在内。

创建war文件时,如果创建者还希望人们获取Java代码和该代码所基于的传递依赖项,他们可以使用maven-war-plugin设置&lt;attachClasses&gt;true&lt;/attachClasses&gt;的配置标签。这将生成一个 artifactId-version-classes.jar 形式的附加工件,以及正常的 artifactId-version.war 文件。

当您将 war 作为覆盖层和将类 jar 作为普通依赖项包含时,您将能够在依赖关系树中看到 maven 仅从 jar 文件依赖项中提取传递依赖项,而不是 war。

在您的情况下,您需要找到 classes jar 文件并将其与 war 文件一起安装在本地 maven 存储库中。然后你可以像这样将 classes jar 添加到你的 pom.xml 中:

旧 pom.xml

<dependency>
  <groupId>com.emc.d2fs</groupId>
  <artifactId>d2_lib</artifactId>
  <version>1.0</version>
  <type>war</type>
  <scope>runtime</scope>
</dependency>

新的 pom.xml

<dependency>
  <groupId>com.emc.d2fs</groupId>
  <artifactId>d2_lib</artifactId>
  <version>1.0</version>
  <type>war</type>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>com.emc.d2fs</groupId>
  <artifactId>d2_lib</artifactId>
  <version>1.0</version>
  <classifier>classes</classifier>
</dependency>

【讨论】:

  • 我收到一条错误消息,提示缺少工件 com.emc.d2fs:d2_lib:war:classes:1.0 ,除了安装我的战争之外,我应该做任何其他事情吗?抱歉我太天真了。我已经创建了我的战争使用jar 命令,目的是将所有 jars 放在一个文件下。
  • 啊,那是你的问题。战争文件是网络档案。它们用于保存 Web 内容,而不是仅仅作为 jar 文件的包装器。您需要将所有 jar 文件添加到单个 jar 中。
  • 运行你用来创建你的war文件的命令,但是把它变成一个jar文件。
  • 我的错!让我试试
  • 我尝试这样做并将 jar 文件安装在本地存储库中,在以下模块之一中添加了依赖项 com.emc.d2fsd2_lib 1.0 还是没有运气 ,,.:(
猜你喜欢
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 2011-08-30
  • 2014-10-12
相关资源
最近更新 更多