问题
I have a multi-project problem that Gradle's documentation doesn't have any info on (and can't find on stackoverflow also). Any help/guidance will be greatly appreciated.
Here are my project layouts:
- project LeftArm: produces a jar file
- project RightArm: produces a jar file
- project AllArms: depends on projects LeftArm and RightArm and produces a
war
file
When I run 'gradle build uploadArchives' in AllArms project, it builds LeftArm and RightArm projects but it doesn't upload the jar
files (produced by LeftArm and RightArm projects) to local Maven repo.
Here are my build.gradle
files:
project LeftArm:
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven'
ext.artifactId = 'LeftArm'
archivesBaseName = ext.artifactId // sets filename of warfile/jarfile output
group = 'mygroup'
version = '1.0'
buildscript
{
repositories
{
mavenLocal()
}
}
jar
{
from(sourceSets['main'].allJava)
}
dependencies
{
compile group: 'javax.validation', name:'validation-api', version:'1.0.0.GA'
compile group: 'javax.validation', name:'validation-api-sources', version:'1.0.0.GA'
}
def localRepoURL = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
// NOTE: this project will publish to the local Maven repo.
uploadArchives
{
repositories
{
mavenDeployer
{
repository(url: localRepoURL)
addFilter('jar')
{
artifact, file -> artifact.ext == 'jar'
}
}
}
}
...
project RightArm:
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven'
ext.artifactId = 'RightArm'
archivesBaseName = ext.artifactId // sets filename of warfile/jarfile output
group = 'mygroup'
version = '1.0'
buildscript
{
repositories
{
mavenLocal()
}
}
jar
{
from(sourceSets['main'].allJava)
}
dependencies
{
compile group: 'javax.validation', name:'validation-api', version:'1.0.0.GA'
compile group: 'javax.validation', name:'validation-api-sources', version:'1.0.0.GA'
}
def localRepoURL = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
// NOTE: this project will publish to the local Maven repo.
uploadArchives
{
repositories
{
mavenDeployer
{
repository(url: localRepoURL)
addFilter('jar')
{
artifact, file -> artifact.ext == 'jar'
}
}
}
}
...
project AllArms:
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'maven'
apply plugin: 'idea'
apply plugin: 'eclipse'
ext.artifactId = 'AllArms'
ext.sourceCompatibility = 1.6
archivesBaseName = artifactId // sets filename of warfile/jarfile output
group = 'mygroup'
version = '1.0'
def gwtVersion = '2.2.0'
repositories
{
mavenLocal()
mavenCentral()
}
dependencies
{
compile project(':LeftArm')
compile project(':RightArm')
// ### NOTE: this is where the build breaks b/c uploadArchives task is not executed ###
compile group: group, name: 'LeftArm', version:version
compile group: group, name: 'RightArm', version:version
providedCompile group: 'javax.validation', name:'validation-api', version:'1.0.0.GA'
providedCompile group: 'javax.validation', name:'validation-api-sources', version:'1.0.0.GA'
providedCompile group: 'com.google.gwt', name:'gwt-user', version:gwtVersion
providedCompile group: 'com.google.gwt', name:'gwt-dev', version:gwtVersion
providedCompile group: 'org.gwtext', name:'gwtext', version:'2.0.4'
}
task compileGwt (dependsOn: classes, type: JavaExec) {
project.ext
{
gwtDir = "${project.buildDir}/gwt"
extraDir = "${project.buildDir}/extra"
gwtModuleName = 'MyModuleName'
}
inputs.source sourceSets.main.java.srcDirs
inputs.dir sourceSets.main.output.resourcesDir
outputs.dir project.gwtDir
// Workaround for incremental build (GRADLE-1483)
outputs.upToDateSpec = new org.gradle.api.specs.AndSpec()
doFirst
{
file(project.gwtDir).mkdirs()
}
main = 'com.google.gwt.dev.Compiler'
classpath
{
[
sourceSets.main.java.srcDirs, // Java source
sourceSets.main.output.resourcesDir, // Generated resources
sourceSets.main.output.classesDir, // Generated classes
sourceSets.main.compileClasspath, // Deps
]
}
args =
[
project.gwtModuleName, // Your GWT module
'-war', project.gwtDir,
'-logLevel', 'INFO',
'-localWorkers', '2',
'-compileReport',
'-extra', project.extraDir,
]
maxHeapSize = '256M'
}
buildscript
{
repositories
{
mavenLocal()
}
}
sourceSets
{
main
{
resources
{ srcDir('src/main/java').include('**/client/**').include('**/public/**').include('**/*.gwt.xml')
}
}
}
war.dependsOn(compileGwt)
war
{
def gwtOutputTree = project.fileTree(project.gwtDir)
from(gwtOutputTree)
baseName = artifactId
}
task classesJar(type: Jar) {
dependsOn(classes)
baseName = artifactId
}
artifacts
{
archives war, classesJar
}
def localRepoURL = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
// NOTE: this project will publish to the local Maven repo.
uploadArchives
{
repositories
{
mavenDeployer
{
repository(url: localRepoURL)
addFilter('war')
{
artifact, file -> artifact.ext == 'war'
}
}
}
}
回答1:
uploadArchives
isn't meant to be used to install to the local Maven repository. Instead, use the install
task.
来源:https://stackoverflow.com/questions/20847758/how-to-tell-gradle-to-build-and-upload-archives-of-dependent-projects-to-local-m