自定义常春藤解析器在Grails中引发空指针异常

自定义常春藤解析器在Grails中引发空指针异常,grails,dependencies,ivy,Grails,Dependencies,Ivy,我在BuildConfig.groovy文件的repositories{…}块中定义了以下自定义解析器,以便在Grails项目中获得使用JAI所需的JAR mavenRepo "http://www.mygrid.org.uk/maven/repository" def jbossResolver = new org.apache.ivy.plugins.resolver.URLResolver() jbossResolver.addArtifactPattern("https://reposi

我在BuildConfig.groovy文件的
repositories{…}
块中定义了以下自定义解析器,以便在Grails项目中获得使用JAI所需的JAR

mavenRepo "http://www.mygrid.org.uk/maven/repository"
def jbossResolver = new org.apache.ivy.plugins.resolver.URLResolver()
jbossResolver.addArtifactPattern("https://repository.jboss.org/nexus/content/groups/public-jboss/com/sun/media/[module]/[revision]/[artifact]-[revision].[ext]")
jbossResolver.addArtifactPattern("https://repository.jboss.org/nexus/content/groups/public-jboss/javax/media/[module]/[revision]/[artifact]-[revision].[ext]")
jbossResolver.setName("AwesomestJbossResolverEver")
resolver jbossResolver
但是,每当我运行
grailsrefresh dependencies
,我都会遇到以下错误:

    compile (
        "net.java.dev.jai-imageio:jai-imageio-core-standalone:1.2-pre-dr-b04-2013-04-23",
        "javax.media:jai-core:1.1.3",
        "com.sun.media:jai-codec:1.1.3"
        ) 
| Error Failed to resolve dependencies (Set log level to 'warn' in BuildConfig.groovy for more information):    
- javax.media:jai-core:1.1.3
- com.sun.media:jai-codec:1.1.3
tried https://repository.jboss.org/nexus/content/groups/public-jboss/com/sun/media/jai-codec/1.1.3/jai-codec-1.1.3.jar
null: no ivy file found for com.sun.media#jai-codec;1.1.3: using default data
problem occurred while resolving dependency: com.sun.media#jai-codec;1.1.3 {compile=[default]} with null: java.lang.NullPointerException
    at java.util.Hashtable.put(Hashtable.java:394)
    at java.util.Properties.setProperty(Properties.java:143)
    at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.saveResolvers(DefaultRepositoryCacheManager.java:422)
    at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.originalToCachedModuleDescriptor(DefaultRepositoryCacheManager.java:875)
......long stack trace here.........
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.rootLoader(GrailsStarter.java:234)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.main(GrailsStarter.java:262)
jai imageio core单机版从位置上可以正常解析,但jai core和jai编解码器文件不断抛出此错误:

    compile (
        "net.java.dev.jai-imageio:jai-imageio-core-standalone:1.2-pre-dr-b04-2013-04-23",
        "javax.media:jai-core:1.1.3",
        "com.sun.media:jai-codec:1.1.3"
        ) 
| Error Failed to resolve dependencies (Set log level to 'warn' in BuildConfig.groovy for more information):    
- javax.media:jai-core:1.1.3
- com.sun.media:jai-codec:1.1.3
tried https://repository.jboss.org/nexus/content/groups/public-jboss/com/sun/media/jai-codec/1.1.3/jai-codec-1.1.3.jar
null: no ivy file found for com.sun.media#jai-codec;1.1.3: using default data
problem occurred while resolving dependency: com.sun.media#jai-codec;1.1.3 {compile=[default]} with null: java.lang.NullPointerException
    at java.util.Hashtable.put(Hashtable.java:394)
    at java.util.Properties.setProperty(Properties.java:143)
    at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.saveResolvers(DefaultRepositoryCacheManager.java:422)
    at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.originalToCachedModuleDescriptor(DefaultRepositoryCacheManager.java:875)
......long stack trace here.........
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.rootLoader(GrailsStarter.java:234)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.main(GrailsStarter.java:262)
通过一些详细的日志记录,我发现了以下错误:

    compile (
        "net.java.dev.jai-imageio:jai-imageio-core-standalone:1.2-pre-dr-b04-2013-04-23",
        "javax.media:jai-core:1.1.3",
        "com.sun.media:jai-codec:1.1.3"
        ) 
| Error Failed to resolve dependencies (Set log level to 'warn' in BuildConfig.groovy for more information):    
- javax.media:jai-core:1.1.3
- com.sun.media:jai-codec:1.1.3
tried https://repository.jboss.org/nexus/content/groups/public-jboss/com/sun/media/jai-codec/1.1.3/jai-codec-1.1.3.jar
null: no ivy file found for com.sun.media#jai-codec;1.1.3: using default data
problem occurred while resolving dependency: com.sun.media#jai-codec;1.1.3 {compile=[default]} with null: java.lang.NullPointerException
    at java.util.Hashtable.put(Hashtable.java:394)
    at java.util.Properties.setProperty(Properties.java:143)
    at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.saveResolvers(DefaultRepositoryCacheManager.java:422)
    at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.originalToCachedModuleDescriptor(DefaultRepositoryCacheManager.java:875)
......long stack trace here.........
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.rootLoader(GrailsStarter.java:234)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.main(GrailsStarter.java:262)
在审查了

我发现问题在于,我的自定义jboss解析器需要一个名称。我将
存储库
块的该部分更改为:

def jbossResolver = new org.apache.ivy.plugins.resolver.URLResolver()
jbossResolver.addArtifactPattern("https://repository.jboss.org/nexus/content/groups/public-jboss/com/sun/media/[module]/[revision]/[artifact]-[revision].[ext]")
jbossResolver.addArtifactPattern("https://repository.jboss.org/nexus/content/groups/public-jboss/javax/media/[module]/[revision]/[artifact]-[revision].[ext]")
jbossResolver.setName("AwesomestJbossResolverEver")
resolver jbossResolver
用setName方法添加名称是消除nullPointer异常的全部步骤

值得注意的是,如果更仔细地阅读Grails文档,关于自定义解析器的部分可能会提示这个问题,因为它们的自定义urlsolver指定了一个名称和设置属性。LFMF