简体   繁体   中英

Gradle fatJar/uberJar causing Could not find or load main class

I'm having an issue where gradle fatJar/uberJar is causing the following exception when trying to run the jar:

Error: Could not find or load main class com.domhauton.membrane.Main

The simple jar task without

from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar

works with no issues (up to the point where it starts needing dependencies).

I presume this is to do with one of my dependencies changing the classpath, but I'm not sure why that would be happening.

Relevant part of build.gradle

project.version = '1.0.0-alpha.2'
project.group = 'com.domhauton.membrane'

jar {
    baseName = 'membrane-daemon-simple'
    version = project.version
    manifest {
        attributes 'Implementation-Title': 'Membrane Daemon',
                'Implementation-Version': project.version,
                'Main-Class': project.group + '.Main'
    }
}

//create a single Jar with all dependencies
task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Membrane Daemon',
                'Implementation-Version': project.version,
                'Main-Class': project.group + '.Main'
    }
    baseName = 'membrane-daemon'
    version = project.version
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

Gradle build file is here (with the remainder of code):

https://github.com/domhauton/membraned/blob/master/build.gradle

The META-INF folder is very full of files from the other dependencies so I'm not sure where to start looking for conflicts.

Took another run at the problem using shadowjar and it worked flawlessly.

Relevant code:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath group: 'com.github.jengelman.gradle.plugins', name: 'shadow', version: '1.2.4'
    }
}

apply plugin: 'com.github.johnrengelman.shadow'

project.version = '1.0.0-alpha.2'
project.group = 'com.domhauton.membrane'

jar {
    baseName = 'membrane-daemon'
    version = project.version
    manifest {
        attributes 'Implementation-Title': 'Membrane Daemon',
                'Implementation-Version': project.version,
                'Main-Class': project.group + '.Main'
    }
}

Can be seen in context here: https://github.com/domhauton/membraned/blob/4d28ea451acc5bf52724a0cc5c94823659236287/build.gradle

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM