Я хочу опубликовать артефакт maven из проекта, который включает все классы из подмодулей (например, fatJar), вместо того, чтобы иметь их как зависимости в файле pom в опубликованном артефакте.
Предполагая, что у меня есть настройка проекта Gradle, например
root
- moduleToPublish
- dependendencyOne
- dependendencyTwo
и я хочу опубликовать артефакт для moduleToPublish, я настраиваю его buid.gradle, как показано ниже (обратите внимание на прямые зависимости от других подмодулей)
dependencies {
compile project(':dependencyOne')
compile project(':dependencyTwo')
compile other3PMavenDependencies...
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}
Когда я запускаю ./gradlew :moduleToPublish:publish, в артефакт включаются только классы из moduleToPublish, тогда как зависимости подмодуля попадают в файл pom вместе с зависимостями 3p.
Однако в моем случае я бы хотел, чтобы артефакт также включал классы из этих подмодулей, и я не уверен, как туда добраться. Это потому, что я хочу, чтобы все мои потребители могли использовать один артефакт, который включает в себя все зависимости из моего проекта, вместо того, чтобы я публиковал отдельные зависимости, а затем потребители использовали их по отдельности. У меня эти модули разделены на gradle, потому что внутренние модули используют их части в разное время, поэтому я не хочу объединять их как один модуль gradle.
Я попробовал artifact ':dependencyOne', предполагая, что он будет использовать Плагин MavenArtifact, но он жаловался только на то, что публикуется более одного артефакта. Любая помощь здесь была бы замечательной.
Спасибо, это действительно сработало. Я хотел настроить плагин maven-publish вместо того, чтобы исправлять его в сгенерированном JAR. Единственная проблема, которая у меня осталась, - это удалить эти внутренние зависимости из файла POM, создаваемого как часть maven-publish, потому что без этого потребитель все еще жалуется на отсутствующую зависимость (даже если это часть сгенерированного JAR). Единственное решение, которое я нашел и с которым я экспериментирую, - это изменить конфигурацию pom в maven-publish, чтобы явно пропустить эти внутренние зависимости. Есть ли лучший подход для решения этой проблемы?
Чтобы быть точным, я закончил тем, что использовал `` pom.withXml {asNode (). Dependencies.dependency.each {dep -> if (dep.groupId.last (). Value (). Last (). Contains ("< внутреннее имя модуля> ")) {assert dep.parent (). remove (dep)}}}` ``




вы можете настроить задачу
jarиз проектаmoduleToPublish, чтобы включить классы, созданные из двух других модулей. что-то вроде:jar { from (project(':dependendencyOne').sourceSets.main.output) }