#dependencies #gradle
#зависимости #gradle
Вопрос:
Я работаю над проектом для школы, и мне понадобилась библиотека Jackson для разбора файлов json. Я включил библиотеку в свой скрипт gradle следующим образом :
...
dependencies {
compile 'org.codehaus.jackson:jackson-core-asl:1.9.0'
compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.0'
compile 'org.hibernate:hibernate-validator:4.2.0.Final'
testCompile 'junit:junit:4.9'
}
...
Я также добавил свою папку classes в classpath.
сборка с gradle в порядке, она фактически загружает библиотеки и все такое, но когда я запускаю свою программу ( из строки cmd с> java name.of.package.Main ) в нем говорится :
> Exception in thread "main" java.lang.NoClassDefFoundError:
> org/codehaus/jackson/map/JsonMappingException
> at java.lang.Class.getDeclaredMethods0(Native Method)
> at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
> at java.lang.Class.getMethod0(Unknown Source)
> at java.lang.Class.getMethod(Unknown Source)
> at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
> at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) Caused by: java.lang.ClassNotFoundException:
> org.codehaus.jackson.map.JsonMappingException
> at java.net.URLClassLoader$1.run(Unknown Source)
> at java.net.URLClassLoader$1.run(Unknown Source)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(Unknown Source)
> at java.lang.ClassLoader.loadClass(Unknown Source)
> at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
> at java.lang.ClassLoader.loadClass(Unknown Source)
> ... 6 more
но я заметил, что когда я добавляю те же две библиотеки из файла gradle в classpath, все в порядке ..
кто-нибудь может мне сказать, должен ли я вручную добавлять библиотеки в classpath? какая тогда польза от gradle в этом случае ..
большое спасибо!
Ответ №1:
Gradle не устанавливает CLASSPATH
переменную окружения (если вы это имеете в виду). Плагин приложения позволяет запускать приложение командной строки с помощью gradle run
. Плагин также может создавать сценарии оболочки для запуска приложения. В обоих случаях в JVM будет передан правильный путь к классу.
Комментарии:
1.спасибо за ваш ответ! на самом деле, поскольку это школьный проект, у меня нет возможности добавить плагин приложения, у меня есть инструкции, которым я должен следовать, и в этих инструкциях говорится, что я должен настроить свой
build.gradle
, ввести в командной строке gradle build, затем ввести в java name.of.package .Основной arg1. по какой возможной причине он не может найти классы из библиотек, хотя и загружен gradle из MavenCentral? еще раз спасибо, мне это действительно нужно.2. Загрузка библиотек — это одно; сообщать о них
java
команде — совсем другое. Gradle не сможет помочь вам с этим, если вы вызоветеjava
команду напрямую. Вам придется использовать опцию -cp или установитьCLASSPATH
переменную. Чтобы упростить это, вы бы сначала скопировали все необходимые библиотеки в каталог, например: «task copyLibs(type: Copy) { из configuration.runtime; в «lib» }