Vector
Vector

Reputation: 175

Dependency in gradle does not link jars

I have a gradle setup with two projects. Layout:

build.gradle
libtestapp/
  >src/
    >main/
      >java/
        >testapp/
          >Test.java
settings.gradle
testapp-gui/
  >src/
    >main/
      >java/
        >testapp/
          >TestGui.java

Project testapp-gui uses functions from libtestapp. The project testapp-gui compiles when running gradle :testapp-gui:build. But when running the jar, Java complains that the class Test is missing.

build.gradle:

subprojects {                                                                                                                                                                                                    
    apply plugin: 'java'
}

project(':testapp-gui') {
    dependencies {
        compile project(':libtestapp')
    }

    jar {
        manifest {
            attributes 'Main-Class': 'testapp.TestGui'
        }
    }
}

settings.gradle:

include 'libtestapp', 'testapp-gui'

Test.java:

package testapp;                                                                                                                                                                                                 

public class Test {

    public static void call() {
        System.out.println("Hi, Im in libtestapp.");
    }

}

TestGui.java:

package testapp;                                                                                                                                                                                                 

import testapp.Test;

public class TestGui {

    public static void main(String[] args) {
       Test.call();
    }

}

Java error:

Exception in thread "main" java.lang.NoClassDefFoundError: testapp/Test
  at testapp.TestGui.main(TestGui.java:8)
Caused by: java.lang.ClassNotFoundException: testapp.Test
  at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 1 more

Upvotes: 1

Views: 97

Answers (1)

yonisha
yonisha

Reputation: 3096

Unless you're executing your application from within IntelliJ or another IDE, when using the command line you need to explicitly include the dependencies, using the '-classpth' or '-cp' switch:

java -cp .;libs\*.jar your.package.MainClass

Upvotes: 1

Related Questions