Использовать локальный jar как зависимость в моем проекте Gradle Java - PullRequest
9 голосов
/ 20 сентября 2019

У меня есть локальный файл jar с именем mylib.jar.Я хочу использовать его как зависимость в моем проекте Gradle Java.

Вот что я попробовал:

Я создал папку libs/ в корневом каталоге проекта.Я помещаю файл jar в папку libs/.

MyProject
 ->libs/mylib.jar
 ->build.gradle
 ->src/...

В моем build.gradle:

apply plugin: 'java-library'

group 'com.my.app'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()

    flatDir {
        dirs 'libs'
    }
 }

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    api files('libs/mylib.jar')
}

Но я не могу получить доступ к публичным классам, определенным в mylib.jar вмой код проекта.Почему?

===== Подробнее =====

Содержимое моей банки:

mylib.jar
    > com.my.jar.package
      >ClassFromJar.class

Вот какЯ использую банку:

// Compilation error: Cannot resolve symobl 'ClassFromJar'
import com.my.jar.package.ClassFromJar;

public class MyEntryPoint {
    // Compilation error: Cannot resolve symbol 'ClassFromJar'
    ClassFromJar instance = new ClassFromJar();
}

Ответы [ 4 ]

5 голосов
/ 23 сентября 2019

Аналогичные ответы, предлагающие

  1. Локальный каталог

Добавить рядом с модулем модуля (не файл приложения):

repositories {
   flatDir {
       dirs 'libs'
   }
}
Относительный путь:
dependencies {
    implementation files('libs/mylib.jar')
}
Использование compile fileTree:
compile fileTree(dir: 'libs', include: 'mylib.jar')
0 голосов
/ 29 сентября 2019

На всякий случай:

1 - компилятор должен иметь доступ к каталогу lib и примеру jar:

javac -cp .;lib\* *.java

2 - ТАКЖЕ импорт должен быть упомянут в примере файла java в вашем добавлении java

import static org.lwjgl.glfw.GLFW.*;
0 голосов
/ 29 сентября 2019

A flatDir хранилище требуется только для *.aar (это формат библиотеки, специфичный для Android, совершенно не относящийся к данному контексту).implementation и api влияют на видимость, но они также специфичны для Android DSL).В обычном Java-модуле на него можно ссылаться так:

dependencies {
    compile fileTree(include: ["*.jar"], dir: "libs")
}

И обязательно поместите *.jar в правильный каталог libs внутри модуля.

0 голосов
/ 28 сентября 2019

Я думаю, что вы должны использовать в объявлении зависимости compile name: 'mylib', в этом случае flatDir будет искать mylib.jar.

Вы можете попробовать следующий build.gradle (он работает в моем проекте):

plugins {
    id 'java'
}
apply plugin: 'java-library'

group 'dependency'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile  name: 'mylib'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...