2014-02-19 3 views
1

У меня конфликт с двумя пакетами в моем проекте java - apache fop и lesscss. я выяснил причину ошибки - менее компилятор используетorg.apache.xmlgraphics fop + org.lesscss lesscss conflict

context.setLanguageVersion(Context.VERSION_1_7);

в это конструктор, где контекст является объектом класса org.mozilla.javascript.Context (носорог пакет). Но 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) Некоторый тест сервлет со следующим содержанием:

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

Compiling это с помощью МВНОВ чистого пакета будет вызывать

java.lang.IllegalArgumentException: Плохой язык версия: 170

Это потому, что исправлено (по fop) Контекст используется, но я хочу Rhino original Context, который поддерживает версию 1.7. Если вы удалите fop-зависимость из pom.xml, все будет работать нормально.

Так как я могу использовать как fop, так и lesscss без каких-либо ошибок?

ответ

1

Я ударил эту проблему в процессе производства и решил ее, удалив batik-js из класса.

Эмпирически, org.apache.xmlgraphics 1.7 отлично работает с носорогом 1.7R4 (непатентованный), что и зависит от org.lesscss/lesscss 1.3.3. Поэтому просто исключаем batik-js из вашего пути build/classpath.

Смежные вопросы