gradle многомодульный проект - не видит классы из зависимого модуля

139
05 мая 2018, 17:34

В корне проекта settings.gradle:

rootProject.name = 'Gradle_Multiproject'
include 'main_project', 'library_project'

В папке /main_project файл build.gradle:

apply plugin: "java"
apply plugin: "application"
mainClassName = "com.example.Main"
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
repositories {
    mavenCentral()
}
dependencies {
    compile project(":library_project")
}
jar {
    manifest.attributes("Main-Class": mainClassName);
}
task wrapper(type: Wrapper) {
    gradleVersion = "1.12"
}

Main.java

package com.example;
import com.example.Simple;
public class Main {
    public static void main(String[] args) {
        System.out.println("main project");
        Simple simple = new Simple();
    }
}

В папке /library_project файл build.gradle:

apply plugin: "java"
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7

Simple.java:

package com.example;
public class Simple {
    private int value;
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
}

Если сбилдить из корня gradle build, а затем из-под main_project запустить

java -jar build/libs/main_project.jar

то выйдет ошибка что класс Simple не найден.

Как тогда подключить классы из зависимого модуля, указанного в depencencies как compile project?

Answer 1

По дефолту таск jar не пакует зависимости в вашу jar. Вам нужно либо указать в classpath путь до library_project.jar, либо спаковать зависимости (это называется fat-jar) в main_project.jar. Это можно сделать так:

jar {
manifest.attributes("Main-Class": mainClassName);
from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}  

http://www.baeldung.com/gradle-fat-jar

READ ALSO
Сделаю веб приложения [требует правки]

Сделаю веб приложения [требует правки]

Вопрос такой, есть интернет магазин и когда юзер заходит и добавит продукт за каждую добавлению будет автоматический создаваться новый jsp? Или...

192
Observe db как подписаться на изменения?

Observe db как подписаться на изменения?

У меня есть бдСоздается она в java

168
Падает mysql сервер при запросе Alter Table

Падает mysql сервер при запросе Alter Table

Использую команду ALTER TABLEВроде всё просто

207