#gradle
Вопрос:
Как попросить gradle упаковать только банки зависимостей в zip-файл без банки модулей, содержащей классы модулей?
Я использую DSL Kotlin Gradle, но также приветствуются отличные решения. Я сам могу перевести их на Котлин.
Ответ №1:
Вы можете настроить Zip
задачу следующим образом:
tasks.register('packageDeps', Zip) {
from configurations.runtimeClasspath
}
Это зависит от того, какой у вас проект, из какой конфигурации вам нужно скопировать. В примере это проект Java, и мы копируем зависимости из пути к классу среды выполнения (т. е. runtimeClasspath
Конфигурации). Вы можете запустить ./gradlew dependencies
, чтобы узнать, какие конфигурации существуют в вашем проекте; вы можете использовать только те конфигурации, которые должны быть разрешены, т. е. те, в описании которых их нет (n)
.
Примерный Проект
Вот автономный проект, с которым я это протестировал (не показаны файлы обертки Gradle 7.2):
├── build.gradle
├── settings.gradle
└── src
└── main
└── java
└── com
└── example
└── MyClass.java
При запуске ./gradlew packageDeps
этого проекта создается ZIP-файл, build/distributions/my-deps.zip
который содержит только файлы зависимостей (вкл. переходные), а не MyClass.class
файл или соответствующий JAR.
build.gradle
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'com.google.guava:guava:28.2-jre'
}
tasks.register('packageDeps', Zip) {
from configurations.runtimeClasspath
archiveFileName = 'my-deps.zip'
}
settings.gradle
(пусто)
src/main/java/com/example/MyClass.java
package com.example;
public class MyClass {
public static void main(String... args) {
System.out.println("Hello world!");
}
}