org.apache.xmlgraphics fop + org.lesscss kurangi konflik

Saya mengalami konflik saat menggunakan dua paket di proyek Java saya - Apache fop dan lesscss. Saya menemukan alasan kesalahan tersebut - lebih sedikit penggunaan kompiler

context.setLanguageVersion(Context.VERSION_1_7);

di konstruktornya, di mana konteks adalah objek kelas org.mozilla.javascript.Context (paket badak). Tapi apache fop telah menambal versi objek ini (http://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-js/1.7), yang tidak mendukung versi bahasa 1.7. Jadi, inilah kumpulan file yang sangat disederhanakan, yang dapat menunjukkan masalah saya. Yang kamu butuhkan adalah

1) pom.xml dengan konten berikut:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <packaging>war</packaging>
    <version>0.1</version>

    <dependencies>
        <dependency>
            <groupId>org.mozilla</groupId>
            <artifactId>rhino</artifactId>
            <version>1.7R4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>fop</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

2) Beberapa servlet pengujian dengan konten berikut:

package main;

import org.mozilla.javascript.Context;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class TestServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        Context context = new Context();
        context.setLanguageVersion(Context.VERSION_1_7);
    }
}

Mengompilasi ini menggunakan mvn clean package akan menyebabkan masalah

java.lang.IllegalArgumentException: Versi bahasa buruk: 170

Itu karena Konteks yang ditambal (oleh fop) menggunakan, tetapi saya ingin Konteks asli Rhino, yang mendukung versi 1.7. Jika Anda menghapus ketergantungan fop dari pom.xml, semuanya akan berfungsi dengan baik.

Jadi bagaimana saya bisa menggunakan fop dan lesscss tanpa kesalahan?


person Kirill Smirnov    schedule 19.02.2014    source sumber


Jawaban (1)


Saya menemukan masalah ini dalam produksi dan menyelesaikannya dengan menghapus batik-js dari classpath.

Secara empiris, org.apache.xmlgraphics 1.7 berfungsi baik dengan rhino 1.7R4 (belum ditambal), yang menjadi sandaran org.lesscss/lesscss 1.3.3. Jadi, kecualikan saja batik-js dari build/classpath Anda.

person Aaron Iba    schedule 06.03.2014