我正在尝试构建一个Bukkit插件。该插件还使用exp4j。最终结果需要在发布的jar中包含exp4j代码,但不包含Bukkit代码。
我按照这个答案的建议将依赖项复制到中,并使用这个答案将Bukkit声明为已提供。我的build.gradle现在看起来像这样:
apply plugin: 'java'
apply plugin: 'idea'
configurations {
provided
}
sourceSets {
main.compileClasspath += configurations.provided
test.compileClasspath += configurations.provided
test.runtimeClasspath += configurations.provided
}
dependencies {
provided "org.bukkit:bukkit:1.8.8-R0.1-SNAPSHOT"
compile "net.objecthunter:exp4j:0.4.5"
}
jar {
// copy the dependencies across
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}
这非常有效,我可以从命令行使用Gradle愉快地构建和运行项目。问题在于Intellij(或者可能是Gradle idea插件)无法识别提供的依赖项,因此,从Bukkit导入任何内容都会导致错误报告。
我怎样才能让所提供的依赖项很好地与idea配合呢?
我还尝试像这样声明提供的范围:
configurations {
provided
compile.extendsFrom provided
}
但这会导致提供的依赖项复制到最终的 jar 中。我也尝试了这个答案推荐的插件,但两者都会导致Bukkit被复制到创建的jar中。我进一步尝试将Bukkit声明为运行时范围,但这只是导致许多编译错误(但有趣的是Intellij确实将Bukkit列为依赖项)
我很难相信以前没有人问过这个问题,但是我已经搜索过了,找不到一个完整的解决方案。我是Gradle的新手,所以如果这是一件非常简单的事情,我很抱歉。
我确实找到了一个非常糟糕的解决方案。但是太糟糕了,我觉得把它贴在这里很糟糕: P
明显的问题,任何使用你的项目的人都必须做同样的黑客攻击。每次你重新生成想法文件时,同样的事情将不得不重复。
请参阅此处的Gradle问题。
gradle中没有提供配置,尽管实际上应该有一个。目前最合理的解决方法似乎是创建您自己的配置:
configurations {
provided
}
然后:
sourceSets {
main {
compileClasspath += configurations.provided
}
}
extendsFrom
的问题在于,所提供的依赖项最终将被捆绑到您的发行版中,除非您添加另一个显式排除,从而破坏了提供的整个要点。
编辑:要告诉想法使用提供的依赖项,您可以应用“想法”
插件,然后:
idea {
module {
scopes.PROVIDED.plus += [ configurations.provided ]
}
}
在此处查看更多内容。
在Gradle 2.12及更高版本中,有一个名为<code>compileOnly</code>的配置,它提供了您想要的语义。
关于这个配置的更多信息,请访问Gradle关于这个主题的博客。
在2.12之前,您可以使用星云。提供基本
插件,以创建具有所有正确语义的提供的
配置。
我的结构如下: 项目A- 项目B- 编译项目B一切正常: 项目B/build.gradle: ProjectB/settings.gradle: 然而,在编译ProjectA时,它表示找不到ProjectC ProjectA/build.gradle: ProjectA/settings.gradle: 这将显示以下错误: 其中:构建文件ProjectB\build.gradle 出了什么问题:
我有一个J2ee项目,它使用了诸如Jsf、EJB、持久性API等技术。但是我怎么知道这些模块需要的wich版本。例如: 现在,我在maven中央存储库中查找这些信息:GroupId、ArtifactID和最新版本。但有一个更简单的方法做到这一点?
我目前正在尝试将一个通过RFC连接到SAP系统的旧Java EE解决方案迁移到Quarkus。由于项目使用maven,我再次面临sapjco3的问题。来自SAP的jar库,防止该库被重命名。如果我像那样添加库作为依赖项 它将被添加到lib目录中,名称为com.sap.sapjco3-3.1.jar.不幸的是,最终以异常结束 JAVAlang.ExceptionInInitializerError:
我正在尝试编译几个WAR文件,所有这些都依赖于一个公共的JAR模块。然而,在我的Gradle构建中,我似乎无法获得类似于“提供”的依赖关系来使用Java插件。 然而,最后这一位将生成具有适当依赖关系的变量newRuntime,然而,当我试图将该变量重新分配回运行时配置时,它抛出一个“无法找到属性异常”。 我在Gradle的bug跟踪中发现了很多关于这个问题的讨论:Gradle-784 然而,这方面
我希望使用Gradle构建我的基于Groovy/Grails的项目,我们使用IntelliJ Idea作为IDE。 我使用的是IntelliJ 11.1.4版本,Gradle 1.2版本。 我的项目被配置为包含各种Groovy&Grails子项目的多项目构建。 我希望这将为我提供与通过Maven管理构建时相同的IDE支持,例如: 自动依赖关系管理(将新的依赖关系添加到各种Build.Gradle时