Нужно ли использовать плагин «java платформа» или нет?
Нет. Если у вас не Java проекты, вам не следует использовать плагин Java. Как видно из названия плагина, он предназначен для Java проектов.
Gradle предлагает официальный плагин для платформы для Java проектов, но для чего-то помимо этого, такого как C ++ / Swift, вам нужно будет свернуть свой собственный плагин / реализация платформы. Вы можете обратиться к исходному коду , чтобы помочь с вашей реализацией.
Даже если бы мы все были Java, для любого одного проекта у нас не может быть отдельных версий для его «api» и его «время выполнения»
Вам не нужно иметь отдельные версии для каждой конфигурации. api
расширяется implementation
, а runtimeClasspath
(runtimeOnly
) расширяется от implementation
. Поэтому объявления зависимостей для api
должно быть достаточно. Обратитесь к диаграмме зависимостей здесь .
Как Gradle узнает, какие ограничения конфигурации соответствуют проекту между платформой и спецификациями платформы?
По тому, как вы указываете это в своем проекте и реализации платформы в плагине Java. Например, учитывая следующую платформу:
// my-platform
plugins {
`java-platform`
}
dependencies {
constraints {
api("commons-httpclient:commons-httpclient:3.1")
}
}
Я могу выполнить в проекте любое из следующих действий:
dependencies {
api(platform(":my-platform"))
implementation(platform(":my-platform"))
annotationProcessor(platform(":my-platform"))
}
Я надеюсь, что Gradle не пытается соответствовать « от api »до« api »путем простого сопоставления имени
Сопоставление выполняется в зависимости от использования. Смотрите эту строку и эти строки. api
- это просто имя конфигурации Gradle, выбранное для их плагина, см. здесь . Они буквально могли выбрать любое имя, но, скорее всего, выбрали api
/ runtime
, чтобы сохранить сходство с тем, что у них есть.
Большая часть документации, которую вы найдете на платформах, ориентирован на Java разработчиков. Я полагаю, что это в первую очередь из-за того, что концепция платформы в значительной степени вдохновлена спецификацией Maven
Если вы действительно хотите знать, как Gradle работает с платформой, то либо тщательно изучите исходный код, либо напишите простой плагин Gradle, который использует платформу, а затем напишите тест с использованием GradleRunner и выполните отладку с точками останова. Пример плагина может быть:
public class ExamplePlatformPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.getRepositories().mavenCentral();
DependencyHandler dependencies = project.getDependencies();
// api(platform(""org.springframework.boot:spring-boot-dependencies:2.2.6.RELEASE"")
Dependency springBootPlatform = dependencies.platform("org.springframework.boot:spring-boot-dependencies:2.2.6.RELEASE");
dependencies.add(JavaPlugin.API_CONFIGURATION_NAME, springBootPlatform);
// api("org.apache.commons:commons-lang3")
dependencies.add(JavaPlugin.API_CONFIGURATION_NAME, "org.apache.commons:commons-lang3");
}
}