2016-03-29 3 views
0

У меня есть проект градиента, который использует sqlite4java, и я работаю в eclipse.Как получить Gradle для генерации java.library.path для eclipse

Моя проблема заключается в том, что когда я получаю градиент для создания файлов проекта eclipse, путь к классу проекта содержит собственные библиотеки sqlite4java в пути к классам, а не на java.library.path, что заставляет eclipse не создавать проект, потому что он жалуется что на родные библиотеки не сформированы zip-файлы. Кроме того, когда я вручную удаляю собственные библиотеки из пути к классам, тогда, когда я запускаю тесты или приложение, они ошибочно, потому что они не могут загружать собственные библиотеки sqlite4java.

Как получить gradle для установки java.library.path в eclipse для sqlite4java, чтобы мой код соответствовал и выполнялся из eclipse?

ответ

0

Найдено решение по этой теме: https://discuss.gradle.org/t/is-it-possible-to-set-eclipses-java-library-path-from-build-gradle/6511/6

Добавление следующий код в мой Gradle файл сборки и повторного запуска gradle eclipse решается вопрос:

build.gradle:

def getSqlLite4JavaNativeLibraryPath() { 
    return configurations.runtime.resolve().findResult { entry -> 
     String absolutPath = entry.getAbsolutePath(); 

     if(absolutPath.contains("sqlite4java-win32-x64")){ 
      // return the directory that contains the native library 
      return entry.getParent() 
     } 
    } 
} 

eclipse.classpath.file.whenMerged { classpath -> 
    //remove the all native libraries as direct dependencies 
    classpath.entries.removeAll { 
     entry -> entry.kind == 'lib' && (entry.path.endsWith('.dll') 
      || entry.path.endsWith('.so') 
      || entry.path.endsWith('.dylib')) 
    } 
    //but add them as native libraries 
    def sqlite4java = classpath.entries.findResult { entry -> 
     if (entry.kind == 'lib' && entry.path.contains('sqlite4java')) { 
      return entry 
     } 
    } 
    sqlite4java.setNativeLibraryLocation(getSqlLite4JavaNativeLibraryPath()) 
} 

созданный файл .classpath теперь содержит атрибуты для каталога родной библиотеки.

.classpath:

<classpathentry sourcepath="C:/Users/user1/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/2efe18f7bea6fa9536802dd4ea54d948117216c6/sqlite4java-1.0.392-sources.jar" kind="lib" path="C:/Users/user1/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/sqlite4java-1.0.392.jar" exported="true"> 
    <attributes> 
     <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="C:\Users\user1\.gradle\caches\modules-2\files-2.1\com.almworks.sqlite4java\sqlite4java-win32-x64\1.0.392\d20dc00abecc7e0bde38c68eee68f2e70c26df95"/> 
    </attributes> 
</classpathentry> 

Я также столкнулся с проблемой, что Gradle модульных тестов были неисправной для загрузки sqlite4java собственных библиотек, поэтому я также необходим добавить следующее к моему Gradle цели теста, так что тесты, выполняемые с помощью gradle, смогут загружать собственные библиотеки sqlite4java.

test { 
    systemProperty "sqlite4java.library.path", getSqlLite4JavaNativeLibraryPath() 
} 

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

  • Нет связанных вопросов^_^