4

サーバー上のPNGにいくつかのSVGのものをレンダリングするためにgrailsでバティックを使用しようとしています。

BuildConfig に依存関係を追加し、IntelliJ に変更をロードするように指示すると、IntelliJ で次のエラーが発生します。

/Library/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/bin/java -Dgrails.home=/Applications/Dev/grails-2.1.0 -Dbase.dir=/Users/greg/Documents/development/git/liftyourgame-grails/webapp -Dtools.jar=/Library/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/lib/tools.jar -Dgroovy.starter.conf=/Applications/Dev/grails-2.1.0/conf/groovy-starter.conf -Xmx512M -XX:MaxPermSize=192m -javaagent:/Applications/IntelliJ IDEA 11.app/plugins/Grails/lib/grails_rt.jar -Dprint.grails.settings=true -Dfile.encoding=UTF-8 -classpath /Applications/Dev/grails-2.1.0/lib/org.codehaus.groovy/groovy-all/jars/groovy-all-1.8.6.jar:/Applications/Dev/grails-2.1.0/dist/grails-bootstrap-2.1.0.jar org.codehaus.groovy.grails.cli.support.GrailsStarter --main org.codehaus.groovy.grails.cli.GrailsScriptRunner --conf /Applications/Dev/grails-2.1.0/conf/groovy-starter.conf help

| Loading Grails 2.1.0
| Configuring classpath
| Error Error executing script Help: loader constraint violation: when resolving overridden method "org.apache.tools.ant.helper.ProjectHelper2$RootHandler.setDocumentLocator(Lorg/xml/sax/Locator;)V" the class loader (instance of org/codehaus/groovy/grails/cli/support/GrailsRootLoader) of the current class, org/apache/tools/ant/helper/ProjectHelper2$RootHandler, and its superclass loader (instance of <bootloader>), have different Class objects for the type org/xml/sax/Locator used in the signature (Use --stacktrace to see the full trace)

IDEA hook: Grails not found!
| Error java.lang.NullPointerException
| Error     at org.jetbrains.groovy.grails.rt.Agent$2.run(Agent.java:88)
| Error     at java.lang.Thread.run(Thread.java:680)

Grails clean でも同様の結果が得られます。

BuildConfig.groovy には以下が含まれます。

grails.project.dependency.resolution = {
    // inherit Grails' default dependencies
    inherits("global") {
        excludes 'slf4j-log4j12', 'xml-apis', 'xalan', 'xml-apis-ext', 'commons-logging', 'commons-io'
    }
    log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    checksums true // Whether to verify checksums on resolve

    repositories {
        inherits true // Whether to inherit repository definitions from plugins
        grailsPlugins()
        grailsHome()
        grailsCentral()
        mavenCentral()
    }
    dependencies {
        compile "org.jadira.usertype:usertype.jodatime:1.9"
        compile "org.imgscalr:imgscalr-lib:4.0"
        compile("org.apache.xmlgraphics:batik-svg-dom:1.7")
            {
                excludes 'batik-xml', 'batik-dom', 'commons-javaflow',
                        'avalon-framework-api', 'avalon-framwork-impl',
                        'batik-css', 'batik-gvt', 'batik-script',
                        'slf4j-log4j12', 'xml-apis', 'xml-apis-ext', 'log4j', 'xercesImpl', 'xalan',
                        'antlr', 'commons-beanutils', 'commons-collections', 'commons-logging', 'xmlParserAPIs',
                        'ant', 'mondrian', 'groovy-all', 'saaj-api', 'servlet-api', 'spring-core', 'bsh',
                        'spring-beans', 'jaxen', 'persistence-api', 'jdtcore', 'bcmail-jdk16', 'bcprov-jdk16',
                        'bctsp-jdk16', 'bcmail-jdk14', 'bcprov-jdk14', 'bctsp-jdk14', 'xmlbeans'
            }

}

batik-svg-dom の pom には、xml-apis と xml-apis-ext だけでなく、他のバティック jar もいくつか含まれています。私の調査によると、xml の依存関係は grails で問題を引き起こす可能性があり、jdk 1.4 以降では必要ないため除外されています。

また、IntelliJs ツールを使用して他の org.xml.sax.Locator インスタンスを追跡しようとしましたが、見つかった唯一のインスタンスは /Applications/Dev/grails-2.1.0/lib/org.apache.ant/ant-launcher にあります。 /jars/ant-launcher-1.8.2.jar!/org/apache/tools/ant/launch/Locator.class

grails refresh-dependencies も試しました.grailsフォルダーを削除しようとしましたが、常に同じ結果が得られます。

アイデアはありますか?

4

1 に答える 1

3

問題は、現在 JDK に含まれているバージョンと競合するバージョンの xml-apis が Batik に含まれていることです。(http://grails.1312388.n4.nabble.com/Problems-integrating-batik-with-grails-project-td4632728.html)したがって、すでに行ったように「xml-apis」を除外することです。しかし、非常に多くの Batik の jar が xml-apis に推移的な依存関係を持っているため、Grails にそれを除外さ​​せるのは困難です。これが最終的に私のために働いたものです:

compile("org.apache.xmlgraphics:fop:0.94",
            "org.apache.xmlgraphics:batik-transcoder:1.7",
            "org.apache.xmlgraphics:batik-codec:1.7",
            "org.apache.xmlgraphics:batik-awt-util:1.7",
            "org.apache.xmlgraphics:batik-bridge:1.7",
            "org.apache.xmlgraphics:batik-dom:1.7",
            "org.apache.xmlgraphics:batik-gvt:1.7",
            "org.apache.xmlgraphics:batik-svg-dom:1.7",
            "org.apache.xmlgraphics:batik-svggen:1.7",
            "org.apache.xmlgraphics:batik-util:1.7",
            "org.apache.xmlgraphics:batik-xml:1.7",
            "org.apache.xmlgraphics:batik-anim:1.7",
            "org.apache.xmlgraphics:batik-css:1.7",
            "org.apache.xmlgraphics:batik-ext:1.7",
            "org.apache.xmlgraphics:batik-js:1.7",
            "org.apache.xmlgraphics:batik-parser:1.7",
            "org.apache.xmlgraphics:batik-script:1.7",
            "org.apache.xmlgraphics:xmlgraphics-commons:1.2",
            "commons-logging:commons-logging:1.0.4",
            "org.apache.avalon.framework:avalon-framework-api:4.3.1",
            "org.apache.avalon.framework:avalon-framework-impl:4.3.1",
            "xalan:xalan:2.6.0",
            "xml-apis:xml-apis-ext:1.3.04"
    ){
        transitive = false
    }

これは基本的に、含めたいBatik jarのホワイトリストです。推移的 = false であるため、推移的な依存関係は無視されます。

ただし、実際にはまだ Batik を動作させることはできません。そのクラスを含む必要な jar ファイルが戦争にデプロイされているにもかかわらず、org.apache.batik.dom.svg.SVGOMDocument が欠落しているという二次的な問題があるようです。

別の実用的なソリューションを見つけましたか?

于 2012-11-20T15:47:55.737 に答える