2015-06-15 3 views
0

Согласно the official Grails docs, Grails 2.4.2 работает с JDK 1.6. Что касается меня, это означает, что я могу запускать все плагины, которые работают с Grails 2.4.2 в среде исполнения, которая работает на JDK 1.6.Почему Spring Security REST Plugin не совместим с JDK 1.6?

Однако, как я попытался развернуть архив войны моего приложения Grails к v3.1 Glassfish, который работает на JDK 1.6, я испытал проблемы с зависимостями, которые не были JDK 1.6 совместимый:

Caused by: java.lang.UnsupportedClassVersionError: WEB9032: Class com.nimbusds.jwt.JWT has unsupported major or minor version numbers, which are greater than those found in the Java Runtime Env 
ironment version 1.6.0_07 
    at  org.glassfish.web.loader.WebappClassLoader.findClass(WebappClassLoader.java:948) 
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1485) 
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1368) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) 
    at java.lang.Class.getDeclaredMethods(Class.java:1791) 
    ... 55 more 

После работает dependency-report, я обнаружил, что проблема была вызвана зависимостью от Spring Security REST Plugin:

+--- org.grails.plugins:spring-security-rest:1.5.1 
| \--- net.spy:spymemcached:2.11.6 
| \--- com.google.guava:guava-io:r03 
|   \--- com.google.guava:guava-annotations:r03 
|   \--- com.google.guava:guava-base:r03 
| \--- org.pac4j:pac4j-core:1.6.0 
| \--- org.pac4j:pac4j-oauth:1.6.0 
|   \--- org.apache.commons:commons-lang3:3.1 
|   \--- org.scribe:scribe:1.3.6 
|   \--- com.fasterxml.jackson.core:jackson-databind:2.0.6 
|    \--- com.fasterxml.jackson.core:jackson-annotations:2.0.6 
|    \--- com.fasterxml.jackson.core:jackson-core:2.0.6 
| \--- com.nimbusds:nimbus-jose-jwt:3.9 
|   \--- net.jcip:jcip-annotations:1.0 
|   \--- net.minidev:json-smart:1.1.1 
|   \--- org.bouncycastle:bcprov-jdk15on:1.51 
|   \--- commons-io:commons-io:2.4 

класс вызывает вопрос, com.nimbusds.jwt.JWT является частью артефакта nimbus-jose-jwt, что й E Spring Security REST Plugin зависит от.

Я чувствую, что этот плагин должен соответствовать JDK 1.6, поскольку на странице плагина написано: Версия Grails: 2.0> *. Это очень вводит в заблуждение, поскольку я потратил довольно много времени на разработку, и теперь я понимаю, что я не могу даже развернуть его для производства. Не стоит ли говорить Версия Grails: 3.0> *, или я что-то не понимаю?

+0

Я являюсь автором 'spring-security-rest'. Честно говоря, я не знал об этом требовании Нимбуса, поэтому не рекламируется. С другой стороны, использование Java 6, когда не только он, но и Java 7 уже не поддерживается, чувствует себя странно для меня. В любом случае, я укажу в документации минимальную версию. –

+0

Благодарим вас за то, что вы время комментируете это. Я искренне удивлен этим быстрым ответом и рад, что это будет задокументировано сейчас, поскольку я люблю ваш плагин и ненавижу тот факт, что я не мог использовать его в производстве. Он работал как шарм на JDK 1.7. Последовал за документацией и не нужно ничего настраивать, кроме цепочки фильтров. Большой плагин, не означает критиковать что-либо, кроме недокументированной проблемы JDK! – nst1nctz

ответ

2

Я подозреваю причину, по которой Nimbus JOSE+JWT (который используется плагином Spring Security Core) требует, чтобы Java 7+ объяснялась тем, что более низкие версии Java не поддерживают одну и ту же криптографию. Посмотрите через их веб-сайт, и вы увидите минимальные требования:

Библиотека Nimbus JOSE + JWT требует Java 7+ и имеет минимальные зависимости.

Ваше предположение, что только потому, что плагин поддерживает Grails 2.0+, означает, что он также поддерживает JDK 1.6 именно так, предположение и, очевидно, неверно. Не требуется, чтобы плагины Grails ориентировались на определенный уровень совместимости Java.

Тот факт, что ваша разработка была выполнена без использования минимальной целевой версии Java, используемой в вашей производственной среде, является настоящим преступником. Вы должны всегда разрабатывать и тестировать с минимальными требованиями целевой производственной среды.

+0

Благодарим вас за разъяснение. Я не был уверен, что регулярная практика не касается проблем соответствия версиям JDK, которые считаются совместимыми с Grails. Вот почему я спрашивал, не понял ли я в первую очередь. Мне это все еще кажется странным. Я запускаю приложение Grails в среде исполнения, которое указано как совместимое для выбранной версии Grails. Затем я устанавливаю плагин, который указан как совместимый с этой версией. Не следует ли указывать в каком-то предупреждении о том, что я могу столкнуться с проблемами в определенных средах исполнения? – nst1nctz

+0

Я знаю, что я должен был использовать JDK 1.6_07 в первую очередь; однако в то время я использовал другую рабочую станцию. Я не говорю, что это не моя вина, просто несколько часов работы можно было бы сэкономить, указав на проблемы с обычными JDK. В конце концов, если бы я некоторое время читал о плагине, попытался установить его на некоторое время, а затем на локальном уровне столкнулся с проблемами соответствия, я бы все же потерял драгоценное время в этом процессе. – nst1nctz

+0

Я согласен с тем, что больше информации, которая может быть предоставлена ​​в отношении минимальных требований, должна быть, и я знаю, если вы обратились к автору плагина, я уверен, что они будут рады включить эту информацию для будущих пользователей. Мне жаль, что вы потеряли драгоценное время, но вы узнали кое-что на этом пути. 1. Версия Grails никоим образом не указывает требования JDK и 2. Всегда разрабатывайте с использованием минимального JDK, который будет использоваться в производстве. Я рад, что смог прояснить вашу путаницу в отношении версии Grails и требований JDK. –

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