2013-08-19 48 views
0

我在BuildConfig.groovy文件的repositories{...}塊中定義了以下自定義解析器,以便我可以在我的Grails項目中獲得使用JAI所需的JAR。自定義Ivy解析器在Grails中引發NullPointer異常

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 

但是,每當我會跑grails refresh-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" 
     ) 

的JAI-ImageIO的核心 - 獨立從http://www.mygrid.org.uk/maven/repository位置解決就好了,但回力核心, JAI編解碼器的文件保存引發此錯誤:

| 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) 

回答

0

審查Ivy resolver documentationDefaultRepositoryCacheManager's saveResolver() method

問題後,我發現,是我的自定義的JBoss解析器需要一個名字。我改變了我的repositories塊的一部分閱讀:

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方法添加名字是所有花,以擺脫空指針異常。

值得注意的是,更仔細地閱讀Grails文檔時,自定義解析器的Grails Documentation部分會暗示出問題,因爲它們的自定義URLResolver指定了名稱和設置屬性。 LFMF

相關問題