У меня конфликт с использованием двух пакетов в моем java-проекте — apache fop и lesscss. Я разобрался с причиной ошибки - компилятор меньше использует
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) Некоторый тестовый сервлет со следующим содержимым:
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: неверная языковая версия: 170
Это потому, что используется пропатченный (от fop) контекст, но я хочу оригинальный контекст Rhino, который поддерживает версию 1.7. Если вы удалите зависимость fop из pom.xml, все будет работать нормально.
Итак, как я могу использовать и fop, и lesscss без каких-либо ошибок?