Один из возможных ответов на этот вопрос, который я, похоже, нашел, но нахожу немного неудовлетворительным, заключается в том, чтобы взять класс, который будет использоваться несколькими проектами, здесь IndexManager
, и поместить его в проект Gradle, которыйспециально разработан для библиотеки Groovy.Для этого вы можете запустить его, создав каталог проекта, а затем:
$ gradle init --type groovy-library
... можно сделать из приглашения Cygwin, но не из Eclipse, насколько я знаю.Таким образом, вы должны импортировать его в Eclipse.Затем build.gradle в этом библиотечном проекте должен включить зависимости, необходимые для IndexManager
, в этом случае:
compile 'org.apache.lucene:lucene-analyzers-common:6.+'
compile 'org.apache.lucene:lucene-queryparser:6.+'
compile 'org.apache.lucene:lucene-highlighter:6.+'
compile 'commons-io:commons-io:2.6'
compile 'org.apache.poi:poi-ooxml:4.0.0'
compile 'ch.qos.logback:logback-classic:1.2.1'
После этого я запустил gradle jar
, чтобы создать .jar, содержащий этот IndexManager
класс, изначально без каких-либо причудливых вещей в манифесте (например, имя, версия).И я поместил этот файл .jar в выделенный локальный каталог.
Затем я создал другой проект Gradle для использования этого файла .jar, критическая зависимость которого здесь
compile files('D:/My Documents/software projects/misc/localJars/XGradleLibExp.jar' )
Используемый файлэтот класс выглядит следующим образом:
package core
import XGradleLibExp.IndexManager
class Test {
public static void main( args ) {
println "hello xxx"
Printer printer = new Printer()
IndexManager im = new IndexManager( printer )
def result = im.makeIndexFromDbaseTable()
println "call result $result"
}
}
class Printer {
def outPS = new PrintStream(System.out, true, 'UTF-8' )
}
... Я спроектировал IndexManager
для использования вспомогательного класса, который имел свойство outPS
.Groovy duck-typing означает, что вам просто нужно что-то предоставить с таким свойством, и, надеюсь, все будет работать.
Вышеуказанное соглашение не сработало: хотя вы можете выполнить build
и installdist
без ошибок, попыткавыполнить распределенный исполняемый файл не удалось, так как указанные выше строки зависимостей 6 compile
отсутствуют в build.gradle проекта-потребителя.Когда вы помещаете их в build.gradle этого «потребительского» проекта Gradle, он работает.
Без сомнения, вы можете добавить версию в сгенерированный файл .jar и, таким образом, сохранить старые версии для использования с «потребительскими» проектами.,Я не понимаю, как вы можете использовать механизм, который делает загрузку и использование зависимостей, необходимых для .jar, настолько автоматическим, насколько мы привыкли к вещам, полученным из «реальных репозиториев».
PS В ходе моей сегодняшней борьбы я, похоже, обнаружил, что плагин Gradle "maven-publish" не совместим с Gradle 5. + (который я использую).Это может иметь или не иметь отношение: некоторые люди говорили об использовании «локального репозитория Maven».Я понятия не имею, является ли это ответом на мою проблему ... Жду ввода от über-Gradle-гика ...:)