【问题标题】:Maven2: can we have dependency for a plugin thats used in the build sectionMaven2:我们可以依赖构建部分中使用的插件吗
【发布时间】:2013-10-05 23:18:18
【问题描述】:

我正在使用一个项目的开源项目,它由一组父 POM 和 几个孩子POM。这些子 POM 代表库、拱型和 一个插件。这个插件依赖于这些子模块中的各种,并且是 在我的依赖项目部分中使用。我已经导入 将此 Maven 项目添加到我的 Eclipse 工作区。

在我自己项目的 POM(也在 Eclipse 中)中,我可以通过以下方式引用这些模块 依赖没有问题。不过我也想用插件 build 部分,但由于以下 Maven2 错误而无法使用:

Project build error: Unresolveable build extension: Plugin org.grouplens.lenskit:lenskit-eval-maven-plugin:2.1-SNAPSHOT or one of its dependencies could not be resolved: Could not find artifact org.grouplens.lenskit:lenskit-eval-maven-plugin:jar:2.1-SNAPSHOT

这是因为我通过 Eclipse 的“解决依赖关系”直接访问 POM 来自工作区项目”,当然这个快照版本还没有部署到 一个存储库,所以这是我实际使用它的唯一方法。

我试过了:

  1. 添加 lenskit-eval-maven-plugin 的任何依赖项: 他们是几个,但我只是添加了项目中唯一的一个 模块(其他包括 maven-plugin-api 之类的东西):

    <dependency>
        <groupId>org.grouplens.lenskit</groupId>
        <artifactId>lenskit-test</artifactId>
        <version>${project.version}</version>
        <scope>test</scope>
    </dependency>
    
  2. 在使用该部分中的模块之前为该插件模块放置一个依赖项

    <dependency>
      <groupId>org.grouplens.lenskit</groupId>
      <artifactId>lenskit-eval-maven-plugin</artifactId>
      <version>${lenskit.version}</version>
    </dependency>
    
  3. 在插件本身中添加依赖项:

      <build>
        <plugins>
          <plugin>
            <artifactId>lenskit-eval-maven-plugin</artifactId>
            <groupId>org.grouplens.lenskit</groupId>
            <!-- TODO -->
            <version>${lenskit.version}</version>
            <extensions>true</extensions>
            <dependencies>
                <dependency>
                  <groupId>org.grouplens.lenskit</groupId>
                  <artifactId>lenskit-eval-maven-plugin</artifactId>
                  <version>${lenskit.version}</version>
                </dependency>
            </dependencies>
    
  4. 并同时使用(0)、(1)和(2)

好的,所以我意识到尝试 (2) 正在推动它。所以我的问题是:他们的 任何方式我都可以在构建部分使用插件,这也是一个依赖项? 如果有怎么办?如果解决方案(1)的使用是正确的,这可能是一个问题 Eclipse先解析到本地工作空间的方法?

TIA

【问题讨论】:

    标签: java eclipse maven plugins


    【解决方案1】:

    maven2 的默认存储库中没有现有的工件。尝试添加显式 repo 或者这个插件不适合 maven2(检查这个 maven3,我没有任何问题)。

    【讨论】:

    • 这是一个尚未部署到存储库的快照,因此没有可用的 Maven 存储库。我正在处理代码,以便以后可以部署它。我目前正在使用 Eclipse 的“解决工作区项目中的依赖项”来使用代码。这个“工作区回购”被发现并且确实有效(如项目的构建路径所示)。我认为这是 Maven POM 的问题。我的问题是关于 POM 而不是 repo。
    • 我的意思是repo,maven从那里下载依赖。您可以使用 标签添加它。你应该阅读 maven 基础知识link
    • 就是这样。我没有回购。我只有一个本地 Maven 项目。我希望 Eclipse m2e 可以像处理其他依赖项一样处理这个问题。它报告上述错误。现在我将使用 repo 版本 2.0.2。
    【解决方案2】:

    maven central you will not find any snapshot version 这样的东西才发布。在您的情况下,您需要使用不同版本的插件,如下所示:

    <groupId>org.grouplens.lenskit</groupId>
    <artifactId>lenskit-eval-maven-plugin</artifactId>
    <version>2.0.2</version>
    

    2013 年 9 月...

    你在问题​​中提到的事情是这样的:

    <build>
        <plugins>
          <plugin>
            <artifactId>lenskit-eval-maven-plugin</artifactId>
            <groupId>org.grouplens.lenskit</groupId>
            <!-- TODO -->
            <version>${lenskit.version}</version>
            <extensions>true</extensions>
            <dependencies>
                <dependency>
                  <groupId>org.grouplens.lenskit</groupId>
                  <artifactId>lenskit-eval-maven-plugin</artifactId>
                  <version>${lenskit.version}</version>
                </dependency>
            </dependencies
    

    没有意义,因为您定义了一个插件,您希望将相同的插件添加到插件的类路径中。

    唯一能让您解决问题的方法是使用正确的版本,如下所示:

    <build>
        <plugins>
          <plugin>
            <artifactId>lenskit-eval-maven-plugin</artifactId>
            <groupId>org.grouplens.lenskit</groupId>
            <!-- TODO -->
            <version>2.0.2</version>
            <extensions>true</extensions>
            <...>
          </plugin>
          ...
       </plugins>
    </build>
    

    【讨论】:

    • 请看我对其他答案的回复。
    【解决方案3】:

    您可能需要在您的 settings.xml 或 POM 中为您的插件快照版本添加一个 &lt;pluginRepository&gt;,因为不在正常存储库中搜索插件。

    更新

    您的本地 maven 存储库是 $HOME/.m2/repository 下自动创建的在线存储库缓存版本。

    -SNAPSHOT 部署到 Central repo 的版本通常存储在其他地址,必须明确设置。如果您的 POM/settings.xml 中没有它,添加它应该有助于使用快照版本:

    <pluginRepositories>
    <pluginRepository>
      <id>sonatype-snapshots</id>
      <releases><enabled>false</enabled></releases>
      <snapshots><enabled>true</enabled></snapshots>
      <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </pluginRepository>
    </pluginRepositories>
    

    【讨论】:

    • 我没有回购。我只有一个本地 Maven 项目。我希望 Eclipse m2e 可以像处理其他依赖项一样处理这个问题。
    • 希望我听起来不是忘恩负义,但我再说一遍:我只有一个本地 Maven 项目。我正在处理 SNAPSHOT 代码。它仅作为 Maven 项目在我的磁盘上可用。我也无法部署它(不是项目的所有者)。所以我假设我不能使用你上面的例子。我确实认为我可以创建自己的本地存储库,然后为此使用 URL。
    • 是的,很抱歉造成误解。我重新阅读了您的原始帖子:当然,此快照版本尚未部署到存储库,因此这是我实际使用它的唯一方法。如果我做对了,是什么阻止你在父 POM 中使用mvn install 将此插件安装到本地存储库?
    • 我不拥有这个项目,也不能弄乱 POM。我想我可以在本地更改 POM 并将其手动部署到我的本地仓库。但整个问题实际上是我希望 me2 插件能像找到正常的依赖项一样找到这种依赖项。然后我可以更改和测试代码,而无需更改 POM 并手动安装模块。我认为我的项目 POM(而不是模块)中的配置更改会做到这一点。也许我只是要求太多 8-(。不过感谢您的帮助。
    • 是的,你可以下载项目(我以为你就是这样做的)并运行mvn install。如果我了解您的情况,我上面的 &lt;pluginRepositories/&gt; 示例将适用于您当前的设置。这是他们项目中使用的快照存储库,它是公开可用的。
    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 2015-06-26
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多