在gradle.build中使用fatjar插件时如何指定主类

在gradle.build中使用fatjar插件时如何指定主类,jar,build,gradle,intellij-13,uberjar,Jar,Build,Gradle,Intellij 13,Uberjar,我感兴趣的是在一个可执行jar文件中构建一个jar,其中包含所有模块依赖项和外部jar,我将能够使用java-jar myApp.jar运行该文件 我有模块A,它依赖于模块B。 目前我正在使用gradle,我的build.gradle脚本如下所示: apply plugin: 'fatjar' description = "A_Project" dependencies { compile project(':B_Project') compile

我感兴趣的是在一个可执行jar文件中构建一个jar,其中包含所有模块依赖项和外部jar,我将能够使用
java-jar myApp.jar
运行该文件

我有模块A,它依赖于模块B。 目前我正在使用gradle,我的
build.gradle
脚本如下所示:

    apply plugin: 'fatjar'
    description = "A_Project"
    dependencies {
      compile project(':B_Project')
      compile "com.someExternalDependency::3.0"
    }
apply plugin: 'java'
apply plugin: 'application'

mainClassName  = 'com.organization.project.package.mainClassName'

version = '1.0'

task uberjar(type: Jar) {
    from files(sourceSets.main.output.classesDir)
    from {configurations.compile.collect {zipTree(it)}} {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
}

manifest {
    attributes 'Main-Class': 'com.organization.project.package.mainClassName'
    }
}


dependencies {
compile project(':B_Project')
compile "com.someExternalDependency::3.0"
}
当我通过gradle命令构建它时:
cleanbuildfatjar
fatjar“a.jar”按预期创建。 但是,如我在上面所写,使用运行它会导致:
在A.jar中没有主清单属性

如何修改我的
build.gradle
文件并指定主类或清单?

我自己已经弄明白了: 我用过uberjar Gradle任务。 现在,我的build.gradle文件如下所示:

    apply plugin: 'fatjar'
    description = "A_Project"
    dependencies {
      compile project(':B_Project')
      compile "com.someExternalDependency::3.0"
    }
apply plugin: 'java'
apply plugin: 'application'

mainClassName  = 'com.organization.project.package.mainClassName'

version = '1.0'

task uberjar(type: Jar) {
    from files(sourceSets.main.output.classesDir)
    from {configurations.compile.collect {zipTree(it)}} {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
}

manifest {
    attributes 'Main-Class': 'com.organization.project.package.mainClassName'
    }
}


dependencies {
compile project(':B_Project')
compile "com.someExternalDependency::3.0"
}
现在我将它与命令一起使用:

清洁构建uberjar


它构建了一个很好的可运行jar:)

为了使用fatjar使其工作,我在fatjar任务中添加了一个清单部分:

task fatJar(type: Jar) {
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
        attributes 'Main-Class': 'com.organization.project.package.mainClassName'
    }
}

不知道怎么帮你。似乎命令
clean build fatjar
有不同的输出。这是真的吗?请参阅中的“定制MANIFEST.MF”。我需要在MANIFEST下面添加
with jar
,以获取uberjar中
java/main/resources
中的文件。在collect内部还应该是{it.isDirectory()?it:zipTree(it)}。。。