Reputation: 175
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
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