java - org.apache.xmlgraphics fop + org.lesscss lesscss 冲突

标签 java maven apache-fop

我在 java 项目中使用两个包时发生冲突 - apache fop 和 lesscss。 我找出了错误的原因 - less 编译器使用

context.setLanguageVersion(Context.VERSION_1_7);

在它的构造函数中,上下文是 org.mozilla.javascript.Context 类(rhino 包)的对象。 但是 apache fop 已经修补了该对象的版本( http://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-js/1.7 ),它不支持 1.7 语言版本。 所以这里是极其简化的文件集,可以证明我的问题。您所需要的只是

1) pom.xml 包含以下内容:

<?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) 一些测试 servlet,内容如下:

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

使用mvn clean package编译此文件将导致

java.lang.IllegalArgumentException: Bad language version: 170

那是因为(由fop)修补的Context正在使用,但我想要Rhino原始的Context,它支持1.7版本。如果您从 pom.xml 中删除 fop 依赖项,一切都会正常工作。

那么如何才能同时使用 fop 和 lesscss 而不会出现任何错误呢?

最佳答案

我在生产中遇到了这个问题,并通过从类路径中删除 batik-js 来解决它。

根据经验,org.apache.xmlgraphics 1.7 与 rhino 1.7R4(未修补)配合得很好,这正是 org.lesscss/lesscss 1.3.3 所依赖的。因此,只需从构建/类路径中排除 batik-js 即可。

关于java - org.apache.xmlgraphics fop + org.lesscss lesscss 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21891552/

相关文章:

java - spring 作用域代理和 JAXB

apache - 向 Apache Fop 添加注解

maven - 为 testNG 项目创建 Maven Fat jar

xslt - 使用XSL :FO to add attachments to PDF

xsl-fo - Apache fop,XSL FO : Occasionally adds empty page at the end of flow in page sequence (not the last one)

java - 如何建模多对多关系

java - 访问对话框后形成卡住问题

java - 改进 JUNG 图的呈现

java.lang.ClassCastException : spark. servlet.SparkFilter 无法转换为 javax.servlet.Filter

java - Eclipse 无法识别 Maven 项目中的任何错误