如何使用企业 Ivy 实例进行 Grails 依赖管理来解决内部工件
Posted
技术标签:
【中文标题】如何使用企业 Ivy 实例进行 Grails 依赖管理来解决内部工件【英文标题】:How to use corporate Ivy instance for grails dependency management to resolve internal artifacts 【发布时间】:2012-11-26 03:46:53 【问题描述】:全部,
我有一个直接开箱即用的 Grails 项目,没有任何自定义。我有一个简单的页面、简单的控制器、简单的服务;没问题。
问题: 我想通过它的 API 与我们自己的软件平台进行交互。为此,我需要参考我们的内部 jar 工件。我们有自己的 Ivy 存储库,用于管理内部/外部依赖项。我无法将 BuildConfig.groovy 配置为指向内部存储库。这是我根据these instructions尝试的方法
/*
* Configure our resolver.
*/
def libResolver = new org.apache.ivy.plugins.resolver.URLResolver()
['libraries', 'builds'].each
libResolver.addArtifactPattern(
"http://my.repository/$it/" +
"[organisation]/[module]/[revision]/[type]s/[artifact].[ext]")
libResolver.addIvyPattern(
"http://my.repository/$it/" +
"[organisation]/[module]/[revision]/[type]s/[artifact].[ext]")
libResolver.name = "my-repository"
libResolver.settings = ivySettings
resolver libResolver
指向有问题的行失败
resolver libResolver
研究我发现只有几篇关于这个的文章,删除了违规行,得到了更多的错误。删除了更多违规行,没有错误,但在“依赖项”部分指定我的依赖项根本没有解决它们。
问题:
有没有人成功地使用其内部 ivy 存储库配置 grails 项目以进行依赖管理?
【问题讨论】:
【参考方案1】:在这里。
grails.project.dependency.resolution =
...
repositories
inherits true // Whether to inherit repository definitions from plugins
resolver XXXLibResolver(dependencyManager)
grailsPlugins()
...
....
def DependencyResolver XXXLibResolver(IvyDependencyManager dependencyManager)
DefaultRepositoryCacheManager nocache = new DefaultRepositoryCacheManager();
nocache.setUseOrigin(true);
nocache.name = "nocache";
dependencyManager.ivySettings.addRepositoryCacheManager(nocache);
def XXXHome = System.getenv("XXX_HOME")
if (XXXHome)
XXXHome = new File(XXXHome).absolutePath
def fileSystemResolver = new FileSystemResolver()
fileSystemResolver.cache = nocache.name
fileSystemResolver.local = true
fileSystemResolver.name = 'XXX-lib-repo'
fileSystemResolver.addIvyPattern("$XXXHome/libraries/[organisation]/[module]/ivys/ivy-[revision].xml")
fileSystemResolver.addArtifactPattern("$XXXHome/libraries/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]")
fileSystemResolver.settings = dependencyManager.ivySettings
return fileSystemResolver
【讨论】:
阿拉姆,谢谢你的回答。我在哪里放置此代码部分def DependencyResolver XXXLibResolver(IvyDependencyManager dependencyManager) ....
?
然而,这并没有回答关于 ivy 存储库实例的原始问题。这确实解析了本地文件系统中的文件,但是如何指向远程 Ivy 存储库?
def DependencyResolver XXXLibResolver(IvyDependencyManager dependencyManager) .... 在 grails.project.dependency.resolution 范围内定义 ===== 是的,我的本地文件系统中有常春藤存储库的副本。我相信您可以轻松地从 FileSystemResolver() 切换到 org.apache.ivy.plugins.resolver.URLResolver(),只需阅读文档。以上是关于如何使用企业 Ivy 实例进行 Grails 依赖管理来解决内部工件的主要内容,如果未能解决你的问题,请参考以下文章