-
-
Save viktoriia-io/674db15485bd66156a242f7d598ce12e to your computer and use it in GitHub Desktop.
apply plugin: 'maven-publish' | |
afterEvaluate { | |
publishing { | |
publications { | |
maven(MavenPublication) { | |
groupId project.ext.pomGroupID | |
artifactId project.name | |
version project.ext.pomVersion | |
artifact(bundleReleaseAar) | |
pom.withXml { | |
final dependenciesNode = asNode().appendNode('dependencies') | |
ext.addDependency = { Dependency dep, String scope -> | |
if (dep.group == null || dep.version == null || dep.name == null || dep.name == "unspecified") | |
return // invalid dependencies should be ignored | |
final dependencyNode = dependenciesNode.appendNode('dependency') | |
dependencyNode.appendNode('artifactId', dep.name) | |
if (dep.version == 'unspecified') { | |
dependencyNode.appendNode('groupId', project.ext.pomGroupID) | |
dependencyNode.appendNode('version', project.ext.pomVersion) | |
System.println("${project.ext.pomGroupID} ${dep.name} ${project.ext.pomVersion}") | |
} else { | |
dependencyNode.appendNode('groupId', dep.group) | |
dependencyNode.appendNode('version', dep.version) | |
System.println("${dep.group} ${dep.name} ${dep.version}") | |
} | |
dependencyNode.appendNode('scope', scope) | |
// Some dependencies may have types, such as aar, that should be mentioned in the POM file | |
def artifactsList = dep.properties['artifacts'] | |
if (artifactsList != null && artifactsList.size() > 0) { | |
final artifact = artifactsList[0] | |
dependencyNode.appendNode('type', artifact.getType()) | |
} | |
if (!dep.transitive) { | |
// In case of non transitive dependency, all its dependencies should be force excluded from them POM file | |
final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion') | |
exclusionNode.appendNode('groupId', '*') | |
exclusionNode.appendNode('artifactId', '*') | |
} else if (!dep.properties.excludeRules.empty) { | |
// For transitive with exclusions, all exclude rules should be added to the POM file | |
final exclusions = dependencyNode.appendNode('exclusions') | |
dep.properties.excludeRules.each { ExcludeRule rule -> | |
final exclusionNode = exclusions.appendNode('exclusion') | |
exclusionNode.appendNode('groupId', rule.group ?: '*') | |
exclusionNode.appendNode('artifactId', rule.module ?: '*') | |
} | |
} | |
} | |
configurations.api.getDependencies().each { dep -> addDependency(dep, "compile") } | |
configurations.implementation.getDependencies().each { dep -> addDependency(dep, "runtime") } | |
} | |
} | |
} | |
repositories { | |
maven { | |
url 'your_maven_url' | |
credentials { | |
username your_user_name | |
password your_password | |
} | |
} | |
} | |
} | |
} | |
task cleanBuildPublishLocal(type: GradleBuild) { | |
tasks = ['clean', 'build', 'publishToMavenLocal'] | |
} | |
task cleanBuildPublish(type: GradleBuild) { | |
tasks = ['clean', 'build', 'publish'] | |
} |
@Pjumpod somewhere into a separate file on the same level as your module's gradle script. You can use the name maven-publish.gradle for it as author did. Then don't forget to link it in your module's gradle with apply from: 'maven-publish.gradle'
Thanks for the GIST. One of my dependencies(for example: X) needs a custom repository to be declared. Can I add a custom repository into the generated pom.xml? So that users don't have to add X's repository into their project?
i use as you but just modify
repositories {
maven {
url 'https://repo.maven.apache.org/maven2/'
}
}
but when i publish got problem Failed to publish publication 'maven' to repository 'maven'
Could not PUT 'https://repo.maven.apache.org/maven2/com/bill24/24paymentsdk/24paymentsdk/1.0.0/24paymentsdk-1.0.0.aar'. Received status code 503 from server: client read error
Where I need to put this code in gradle?
I have to put them in the Project Gradle or new file?