【问题标题】:Project in multi project can't find specific project dependency多项目中的项目找不到特定的项目依赖项
【发布时间】:2016-02-19 08:00:05
【问题描述】:

我有一个多项目,其结构如下:

  • 核心
  • 插件API
  • 插件/globalOptions
  • 插件/commandPlugin

“插件”只是一个目录。

现在我在“globalOptions”中有几个类:

  • at.lyze.plugin.globalOptions.extensionpoint.OptionExtension
  • at.lyze.plugin.globalOptions.extensionpoint.OptionHandlerExtension

“commandPlugin”中的一个类:

  • at.lyze.plugin.commandPlugin.CommandPluginTest

“CommandPluginTest”类使用来自其他项目的“OptionExtension”和“OptionHandlerExtension”:

import at.lyze.plugin.globalOptions.extensionpoint.OptionExtension;
import at.lyze.plugin.globalOptions.extensionpoint.OptionHandlerExtension;

List<OptionHandlerExtension> optionHandlers = wrapper.getPluginManager().getExtensions(OptionHandlerExtension.class);
        for (OptionHandlerExtension optionHandler : optionHandlers) {
            logger.warn(optionHandler.getOption(getClass(), "TestOption"));
        }

我的 gradle 构建文件如下所示:

“全局选项”:

dependencies {
    compile project(':pluginApi')
}

“命令插件”:

dependencies {
    compile project(':plugins/globalOptions')
    compile project(':pluginApi')
}

当尝试在每个项目上运行“jar”任务时,我收到以下错误:

Note: Extension found in at.lyze.plugin.globalOptions.GlobalOptions$TestExtension
:plugins/globalOptions:compileJava
:plugins/globalOptions:processResources UP-TO-DATE
:plugins/globalOptions:classes
:plugins/globalOptions:jar
Note: Extension found in at.lyze.plugin.commandPlugin.CommandPluginTest$BlarghExtension
    C:\Users\wml\Desktop\LocalRepos\darkowlbot\plugins\commandPlugin\src\main\java\at\lyze\plugin\commandPlugin\Co    mmandPluginTest.java:3: error: package at.lyze.plugin.globalOptions.extensionpoint does not exist
import at.lyze.plugin.globalOptions.extensionpoint.OptionExtension;
                                                  ^
C:\Users\wml\Desktop\LocalRepos\darkowlbot\plugins\commandPlugin\src\main\java\at\lyze\plugin\commandPlugin\Co    mmandPluginTest.java:4: error: package at.lyze.plugin.globalOptions.extensionpoint does not exist
import at.lyze.plugin.globalOptions.extensionpoint.OptionHandlerExtension;
                                              ^
C:\Users\wml\Desktop\LocalRepos\darkowlbot\plugins\commandPlugin\src\main\java\at\lyze\plugin\commandPlugin\Co    mmandPluginTest.java:52: error: cannot find symbol
    public static class BlarghExtension implements EventProcessorExtension, OptionExtension {
                                                                            ^
  symbol:   class OptionExtension
  location: class CommandPluginTest
C:\Users\wml\Desktop\LocalRepos\darkowlbot\plugins\commandPlugin\src\main\java\at\lyze\plugin\commandPlugin\CommandPluginTest.java:76: error: cannot find symbol
        public void initializeOptions(OptionHandlerExtension optionHandlerExtension) {
                                  ^
  symbol:   class OptionHandlerExtension
  location: class CommandPluginExtensionClass
4 errors
:plugins/commandPlugin:compileJava FAILED

FAILURE: Build failed with an exception.

我在这里做错了什么或者为什么会失败? 如果需要,我可以提供更多信息。

运行 gradle 2.9

编辑:

Settings.gradle(每个包含的全局项目)

rootProject.name = 'DarkOwlBot'
include 'pluginApi'
include 'core'
include 'plugins/globalOptions'
include 'plugins/commandPlugin'
include 'plugins/guiFeederService'

【问题讨论】:

    标签: java gradle build build.gradle


    【解决方案1】:

    很可能,gradle 项目名称中的“/”存在问题。默认情况下,项目名称也用于为项目创建 jar。这可能会导致错误的文件路径。

    我认为解决此问题的最佳选择是:

    1. 将 settings.gradle 文件中的 include 语句更改为
      include ':plugins:globalOptions' 并通过以下方式引用 globalOptions compile project(':plugins:globalOptions')

    2. 将 settings.gradle 文件中的 include 语句更改为
      include ':globalOptions' 并通过 project(':globalOptions').projectDir = file('plugins/globalOptions') 显式配置项目目录 并通过 compile project(':globalOptions')

    3. 在你的依赖块中引用它

    【讨论】:

    • 嗯,不。不工作。我已将 settings.gradle 中的每个包含更改为 'plugins:' 并在“commandPlugin”项目中将 depdendependency 更改为 compile project(':plugins:globalOptions')
    • 感谢您的帮助。但是它仍然不起作用。 settings.gradle:include :globalOptions 及以下:project(':globalOptions').projectDir = file('plugins/globalOptions') 无论哪里的“commandPlugin”构建文件看起来像 `compile project(':globalOptions')`` ... 获取相同的包不存在错误
    • 抱歉没有澄清......这也行不通。我目前正在清理我的存储库,以便没有任何密码,如果你想自己查看它,我可以给你它的链接
    • 啊,我希望这是允许的……but here you go。确保切换到“dev”分支……虽然……没关系……
    【解决方案2】:

    除了@ReneGroeschke 所说的之外,您还应该省略into ('classes')here。您正在更改生成的工件的结构。

    【讨论】:

    • 啊,谢谢!基本上我正在使用一个需要目录结构的库,这对于 gradle 显然是错误的,因此它不能“jar 任务”其他项目。
    • 您可以生成两个工件,一个 zip 和 1 个 jar,其结构符合您的库和一般 java 使用的要求。
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2013-11-20
    • 2016-02-10
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2013-01-30
    • 2017-05-17
    相关资源
    最近更新 更多