Programming

build.gradle 파일에 로컬 .jar 파일 종속을 추가하는 방법?

procodes 2020. 2. 10. 22:29
반응형

build.gradle 파일에 로컬 .jar 파일 종속을 추가하는 방법?


따라서 로컬 .jar 파일 종속성을 build.gradle 파일에 추가하려고했습니다.

apply plugin: 'java'

sourceSets {
    main {
        java {
            srcDir 'src/model'
        }
    }
}

dependencies {
    runtime files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
} 

그리고 당신은 여기에서 referenceLibraries 폴더에 .jar 파일을 추가 한 것을 볼 수 있습니다 : https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1/referencedLibraries

그러나 문제는 명령을 실행할 때 : 명령 줄에 gradle build를 실행하면 다음 오류가 발생한다는 것입니다.

error: package com.google.gson does not exist
import com.google.gson.Gson;

여기 내 전체 저장소가 있습니다 : https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1


로컬 디렉토리에서 해당 .jar을 가져와야하는 경우

모듈 gradle 옆에 추가하십시오 (앱 gradle 파일이 아님).

repositories {
   flatDir {
       dirs 'libs'
   }
}


dependencies {
   implementation name: 'gson-2.2.4'
}

그러나 실제 maven 저장소의 표준 .jar이기 때문에 이것을 시도하지 않겠습니까?

repositories {
   mavenCentral()
}
dependencies {
   implementation 'com.google.code.gson:gson:2.2.4'
}

documentation 에 따르면 다음과 같이 로컬 jar 종속성에 대한 상대 경로를 사용하십시오.

dependencies {
    implementation files('libs/something_local.jar')
}

로컬 저장소의 모든 JAR을 포함하는이 작업을 수행 할 수도 있습니다. 이렇게하면 매번 지정할 필요가 없습니다.

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

다음은 나를 위해 작동합니다.

compile fileTree(dir: 'libs', include: '*.jar')

Gradle 설명서를 참조하십시오 .


Gradle에 대해 로컬 Maven 저장소를 재사용 할 수 있습니다.

  • jar을 로컬 Maven 저장소에 설치하십시오.

    mvn install:install-file -Dfile=utility.jar -DgroupId=com.company -DartifactId=utility -Dversion=0.0.1 -Dpackaging=jar

  • jar이 ~/.m2/로컬 Maven 저장소에 설치되어 있는지 확인하십시오.

  • build.gradle파일 에서 로컬 Maven 저장소를 활성화하십시오 .

    repositories {
      mavenCentral()  
      mavenLocal()  
    }
    
    dependencies {  
      implementation ("com.company:utility:0.0.1")  
    }
    
    • 이제 프로젝트에서 jar을 구현할 수 있어야합니다.

받아 들일만한 대답은 좋지만 동일한 타사 Java 라이브러리를 사용하려면 다중 프로젝트 Gradle 빌드 내에 다양한 라이브러리 구성이 필요했습니다.

내 ' allprojects '클로저 ' dir '경로 요소에 ' $ rootProject.projectDir '을 추가하면 각 하위 프로젝트가 동일한 ' libs '디렉토리를 참조하고 해당 하위 프로젝트의 로컬 버전이 아닌 것을 의미합니다 .

//gradle.build snippet
allprojects {
    ...

    repositories {
        //All sub-projects will now refer to the same 'libs' directory
        flatDir {
            dirs "$rootProject.projectDir/libs"
        }
        mavenCentral()
    }

    ...
}

퀴즈 편집 : "$ {rootProject.projectDir}"을 "$ rootProject.projectDir"(최신 Gradle 버전에서 작동)로 변경했습니다.


이를 수행하는 간단한 방법은

compile fileTree(include: ['*.jar'], dir: 'libs')

App의 libs 디렉토리에있는 모든 .jar 파일을 컴파일합니다.


https://stackoverflow.com/a/20956456/1019307 에서 위의 제안을 얻을 수 없었습니다 . 이것은 나를 위해 일했습니다. 프로젝트 루트의 디렉토리에 secondstring-20030401.jar저장 한 파일 libs/의 경우 :

repositories {
    mavenCentral()
    // Not everything is available in a Maven/Gradle repository.  Use a local 'libs/' directory for these.
    flatDir {
       dirs 'libs'
   }
}

...

compile name: 'secondstring-20030401'

질문은 이미 자세히 답변되었습니다. 나는 여전히 나에게 매우 놀라운 것을 추가하고 싶다.

"gradle dependencies"태스크는 파일 종속성을 나열하지 않습니다. 비록 그들이 "종속성"블록에 지정된대로 그렇게 생각할 수도 있지만 ..

따라서 참조 된 로컬 lib 파일이 올바르게 작동하는지 여부를 확인하기 위해이 결과에 의존하지 마십시오.


나를 위해 일한 해결책은 build.gradle 파일의 fileTree 사용법입니다. libs 폴더에 종속성으로 추가해야하는 .jar을 유지하십시오. build.gradle의 dependenices 블록에 아래 코드를 제공하십시오.

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

Kotlin DSL을 사용하는 사람들을위한 솔루션

지금까지 추가 된 솔루션은 OP에 적합하지만 먼저 번역하지 않으면 Kotlin DSL과 함께 사용할 수 없습니다. 다음은 Kotlin DSL을 사용하여 로컬 .JAR을 빌드에 추가 한 예입니다.

dependencies {
    compile(files("/path/to/file.jar"))
    testCompile(files("/path/to/file.jar"))
    testCompile("junit", "junit", "4.12")
}

Windows를 사용하는 경우 백 슬래시를 이스케이프해야합니다.

...
compile(files("C:\\path\\to\\file.jar"))
...

또한 따옴표는 작은 따옴표가 아닌 큰 따옴표 여야합니다.


가장 좋은 방법은 build.gradle 파일에 이것을 추가하고 sync 옵션을 누르는 것입니다.

dependency{
    compile files('path.jar')
}

파일로 이동-> 프로젝트 구조-> 모듈-> 앱-> 종속성 탭-> + (버튼) 클릭-> 파일 종속성 선택-> lib 폴더에서 jar 파일 선택

이 단계는 의존성을 gralde에 자동으로 추가합니다.

매우 간단


항아리를 추가 할 수 있습니다 :

gradle의 경우 다음 코드를 입력하십시오 build.gradle.

dependencies {
...
compile fileTree(dir: 'lib', includes: ['suitetalk-*0.jar'])
...
}

그리고 maven의 경우 다음 단계를 따르십시오.

Intellij의 경우 : 파일-> 프로젝트 구조-> 모듈-> 종속성 탭-> + 기호-> jar 및 종속성-> 가져올 jar 선택-> 확인-> 적용 (표시 된 경우)-> 확인

java.lang.NoClassDefFoundError: Could not initialize class런타임에 예외가 발생 하면 jar의 종속성이 설치되지 않았으므로 상위 프로젝트의 모든 종속성을 추가해야 함을 의미합니다.


지속적인 통합을 사용하는 경우 빌드 서버의 동일한 경로에 라이브러리를 추가해야합니다.

이러한 이유로 로컬 저장소에 jar을 추가하고 빌드 서버에서 동일하게 수행합니다.


또 다른 방법:

트리 뷰에서 라이브러리를 추가하십시오. 이것을 오른쪽 클릭하십시오. "라이브러리로 추가"메뉴를 선택하십시오. 대화 상자가 나타나면 모듈을 선택할 수 있습니다. 알았어. 끝났어.

참고 URL : https://stackoverflow.com/questions/20700053/how-to-add-local-jar-file-dependency-to-build-gradle-file



반응형