2016-01-08 2 views
2

Я довольно новичок в JVM World, и я нахожу Maven и Gradle довольно необычные инструменты для обработки сборки и зависимостей.Как вы обрабатываете веб-файлы .jar-файлы в качестве зависимостей в Gradle?

Мне нужно включить два jar-файла в мое решение. Они не размещаются в каком-либо хранилище Maven. Должен ли я использовать папку libs и делиться файлами между разработчиками или в репо?

Файлы jar не контролируются мной, и я не хочу проходить через суетливость чего-то на Maven Central или что-то подобное. Я верю, что URL-адрес файлов jar довольно устойчив.

ответ

1

Первое решение
Не оставляйте Грейд. Вместо этого попробуйте использовать коллекцию файлов. Он должен работать! Но не для меня, себе второе решение

dependencies { 
     def webHostedJarFiles = ["http://url.to.jar", "http://url.to.second.jar"] 
       .collect{fileName->new File(fileName)} 

     compile([ 
       files{webHostedJarFiles}, 
       'commons-validator:commons-validator:1.4.1' 
       /* and all the other Maven dependencies...*/]) 
    } 

Ввод URL-адреса непосредственно в методе файлов дает вам Не удается преобразовать URL «http://url.to.jar» в файл исключения

По каким-то причинам это не работает для меня. Загрузки были загружены и отображены в плагине градиента IntelliJ, но при компиляции компилятор, похоже, не смог найти.

Второе решение
Не оставляйте Грейд. Вместо этого загрузите файлы в папку libs.

Copy Задача:

task downloadJarsToLibs(){ 
    def f = new File('libs/myFile.jar') 
    if (!f.exists()) { 
     new URL('http://path.to/myFile.jar').withInputStream{ i -> f.withOutputStream{ it << i }} 
    }  
} 

Зависимости:

dependencies { 
      compile([ 
        fileTree(dir: 'libs', include: ['*.jar']), 
        'commons-validator:commons-validator:1.4.1' 
        /* and all the other Maven dependencies...*/]) 
     } 

Третье решение (Cortesey из @RaGe)
Пример файлов:

http://exampe.com/uda/virtuoso/7.2/rdfproviders/jena/210/virt_jena2.jar
http://exampe.com/uda/virtuoso/7.2/jdbc/virtjdbc4.jar

build.gradle:

repositories { 
    ivy { 
     url 'http://example.com/' 
     layout 'pattern', { 
      artifact '/uda/[organisation]/7.2/[module]/[revision].[ext]' 
     } 
    } 
    mavenCentral() 
} 

dependencies { 
    compile 'virtuoso:rdfproviders/jena210:virt_jena2:jar', 'virtuoso:jdbc:virtjdbc4:jar' 

} 

К сожалению, это не похоже на работу для моей установки, но Gradle счастлив и файлы загружаются при необходимости (так как они кэшируются)

+1

альтернативный способ сделать это заключается в том, чтобы притворяться, что онлайновый файл jar представляет собой специальный репозиторий плющ. Преимущество этого заключается в том, что вы можете использовать функцию кеширования gradle, поэтому вам не нужно загружать зависимость для каждой сборки. См. [Мой ответ здесь] (http://stackoverflow.com/questions/23023069/gradle-download-and-unzip-file-from-url/34327202#34327202) – RaGe

+0

Я дал ему попробовать, byt я не смог его получить работать. Не могли бы вы привести пример? – Fontanka16

+0

Я привел пример здесь: http://stackoverflow.com/a/34327202/745574 – RaGe