Gradle:覆盖依赖项目的jar任务

Gradle:覆盖依赖项目的jar任务,gradle,Gradle,我是gradle的新手,所以如果这个问题很琐碎,请不要介意。 我在gradle有一个多项目树。 我的logp公共项目有以下构建脚本 configurations { protobuf compile.extendsFrom protobuf } version = '5.1' defaultTasks = ['clean', 'jar'] dependencies { compile 'net.atomex.schema:rtb-proto:1.0.7

我是gradle的新手,所以如果这个问题很琐碎,请不要介意。 我在gradle有一个多项目树。 我的logp公共项目有以下构建脚本

configurations {
       protobuf
       compile.extendsFrom protobuf
}


version = '5.1'

defaultTasks = ['clean', 'jar']

dependencies {
    compile 'net.atomex.schema:rtb-proto:1.0.7-SNAPSHOT'
    compile 'net.sf.json-lib:json-lib:1.0:jdk15'
    compile 'org.slf4j:slf4j-log4j12:1.6.1'
    compile 'nl.bitwalker:UserAgentUtils:1.6'
    compile 'org.apache.pig:pig:0.8.0'
    compile 'args4j:args4j:2.0.16'
       compile ('org.apache.hadoop:hadoop-core:0.20.2-cdh3u3') {
               exclude group:'com.cloudera.cdh', module:'hadoop-ant'
                exclude group:'javax.servlet', module:'jsp-api'
        }
    protobuf 'com.google.protobuf:protobuf-java:2.4.1'

    compile 'com.google.guava:guava:15.0'
    testCompile 'junit:junit:4.8.2'
}

jar {
   from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
   manifest { attributes 'Main-Class': 'test.Main' }
}
还有一个userEventJob项目,它使用这个(logp common)项目作为依赖项

dependencies {
    compile project(':logp-common')
    compile 'args4j:args4j:2.0.16'
    compile 'junit:junit:4.8.1'
    compile project(':input-file-provider') 
    compile 'org.apache.hive:hive-exec:0.13.1'
    compile 'com.googlecode.json-simple:json-simple:1.1.1'

}


jar {
    version = '1.0'
        exclude('*.properties') 
        exclude('protobuf*.jar')
    from(project.configurations.runtime) {
        into 'lib'
    }
}
现在的问题是,在logpcommonjar中有protobufjar包含的类,因为logpcommon是一个uber jar。 我无法删除它,因为logpcommonjar有时单独使用,所以它应该包含protobufjar类。 但是如果我从userEventJob作为依赖项调用logpcommon,我不需要protobuf类


谢谢。

您可以在logp项目中生成两个不同的jar,一个作为独立的uberjar,另一个作为瘦jar,在第二个项目中用作依赖项。没有一种简单的方法可以将jar的一部分作为依赖项添加到第二个项目。@RaGe:我添加了第二个任务,当独立调用时,该任务会生成所需的输出。但是,我如何使它成为构建任务的一部分,以便每当我进行“gradle clean build”时,它都会创建两个Jar。?将第二个任务设置为
类型:Jar
,然后在构建过程运行
Jar
任务时运行它实际上,我会说,不要像上面那样覆盖Jar任务,只需创建一个类型为jar的额外fatjar任务,以创建一个包含protobuf的jar。默认jar将生成瘦jar您可以在logp项目中生成两个不同的jar,一个作为独立的uberjar,另一个作为瘦jar在第二个项目中用作依赖项。没有一种简单的方法可以将jar的一部分作为依赖项添加到第二个项目。@RaGe:我添加了第二个任务,当独立调用时,该任务会生成所需的输出。但是,我如何使它成为构建任务的一部分,以便每当我进行“gradle clean build”时,它都会创建两个Jar。?将第二个任务设置为
类型:Jar
,然后在构建过程运行
Jar
任务时运行它实际上,我会说,不要像上面那样覆盖Jar任务,只需创建一个类型为jar的额外fatjar任务,以创建一个包含protobuf的jar。默认jar将生成您的瘦jar