Maven没有看到子文件夹中的JAR文件的依赖项

时间:2017-09-13 14:29:20

标签: java maven

我有一个项目,我使用Maven作为构建工具。

在我的pom.xml文件中,我有这些依赖项:

<dependency>
  <groupId>com.my.group1</groupId>
  <artifactId>MyArtifact1</artifactId>
  <version>1.0</version>
</dependency>
<dependency>
  <groupId>com.my.group2</groupId>
  <artifactId>MyArtifact2</artifactId>
  <version>1.1</version>
</dependency>
<dependency>
  <groupId>com.my.group3</groupId>
  <artifactId>MyArtifact3</artifactId>
  <version>1.3</version>
</dependency>

在我拥有pom.xml的文件夹中,我还有一个子文件夹\external。在此子文件夹中,我将上面列出的工件视为广告:MyArtifact1-1.0.jarMyArtifact2-1.1.jarMyArtifact3-1.3.jar

问题在于,当我运行mvn install时,我得到了这个:

[ERROR] Failed to execute goal on project my-project: Could not resolve dependencies for project com.my.group4:sample-project:jar:20161207.3: The following artifacts could not be resolved: com.my.group1:MyArtifact1:jar:1.0, com.my.group2:MyArtifact2:jar:1.1, com.my.group3:MyArtifact3:jar:1.3: Failure to find com.my.group1:MyArtifact1:jar:1.0 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced

到目前为止,我打成了这个:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  -Dfile=./external/MyArtifact1-1.0.jar -DgroupId=com.my.group1 -DartifactId=MyArtifact1 -Dversion=1.0 -Dpackaging=jar

我尝试了以上所有3个包,但看起来它似乎没有任何效果。

3 个答案:

答案 0 :(得分:2)

您是否尝试在计算机中下载的maven编译.jar文件中加入?

请记住,Maven将首先尝试从本地存储库(计算机中的文件夹)和全局存储库中获取依赖项。如果您的依赖项(.jar)不在这些存储库中,您将收到错误消息。

我在这里给你一些想法/解决方案:

  1. 如果.jar文件来自其他maven项目

  2. 如果.jar文件是从其他网站下载的

    • 有时您需要存在于全局maven存储库中的.jar个文件。您可以先尝试搜索这些存储库。您可以访问MVN repository等网站来搜索或浏览存储库中的现有包。如果您找到所需的依赖项,您也可以获得所需的依赖项以包含在pom.xml中。

    • 如果任何存储库中不存在.jar个文件,您可以install the file in your local repositorya tutorial in the Heroku's devcenter中有Mkyong和另一个{{3}}。您必须为该文件选择groupId-artifactId-version,安装该文件并将依赖项添加到项目的pom.xml。 请注意,如果未使用maven创建.jar,则必须提供所有参数

      mvn install:install-file  -Dfile=path-to-your-artifact-jar \
          -DgroupId=your.groupId \
          -DartifactId=your-artifactId \
          -Dversion=version \
          -Dpackaging=jar \
          -DlocalRepositoryPath=path-to-specific-local-repo
      

      如果使用Maven生成.jar,该文件将包含带有元数据的pom.xml。如果您使用Maven 2.5+,则无需提供groupId-artifactId和version。

      mvn install:install-file  -Dfile=path-to-your-artifact-jar \
          -DlocalRepositoryPath=path-to-specific-local-repo
      
    • 还有另一种选择。您可以将system范围与本地systemPath一起使用。但是,我认为此解决方案要求人们将库保留在所有开发人员的相同位置,或者需要在项目/代码存储库中包含.jar文件。使用存储库是一个更好的主意。

      <dependency>
          <artifactId>..</artifactId>
          <groupId>..</groupId>
          <scope>system</scope>
          <systemPath>${basedir}/lib/dependency.jar</systemPath>
      </dependency>
      

答案 1 :(得分:0)

请检查这些罐子是否存在于您的本地存储库中。

您可以从maven setting.xml 文件中找到它的位置,如果没有提及那么它将采用默认路径,即 .m2 文件夹c drive。

您需要先检查这些罐子是否存在。如果没有,那么你需要复制那些正确的文件夹结构,或者你可以在你的本地射击命令下安装这些jar:

    mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id>  -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

答案 2 :(得分:0)

推荐的方法是:

  • 使用Maven Repository管理器,例如Nexus
  • 将Maven配置为使用Single Repository Group
  • 根据需要将代理回购配置为其他Maven存储库,并将其添加到您在设置文件中指定的组中(请参阅上一步)。
  • 如果尚未提供,请在存储库管理器中为第三方库配置存储库,并将其添加到您在设置文件中指定的组(请参阅上一步)。
  • 如果您的依赖项不能从任何仓库获得,请将它们添加到您的第三方仓库
  • 从源代码中删除所有JAR