Gradle을 사용하여 jar에 리소스, 구성 파일 추가


91

Gradle을 사용하여 구성 파일 또는 기타 리소스를 내 jar에 어떻게 추가합니까?

내 프로젝트 구조 :

src / main / java / com / perseus / .. --- Java 패키지 (소스 파일)

src / main / java / config / *. xml --- Spring 구성 파일

예상되는 jar 구조 :

com / perseus / .. --- Java 패키지 (클래스 파일)

config / *. xml --- Spring 구성 파일

답변:


81

리소스에 대한 추가 디렉토리를 추가하는 방법을 검색하는이 게시물을 보았습니다. 누군가에게 유용 할 수있는 해결책을 찾았습니다. 이를 얻기위한 최종 구성은 다음과 같습니다.

sourceSets {
    main {
        resources {
            srcDirs "src/main/resources", "src/main/configs"
        }
    }
}

5
이것은 허용 대답보다 훨씬 간단한 해결책이다
스튜어트

70

구성 파일을 src/main/java에서 src/main/resources.


1
나를 위해 일하고, 이것을 달성하는 가장 쉽고 "가장 정확한"방법처럼 보입니다.
EM-Creations

이 답변은 솔루션이 아닌 해결 방법을 제안하며 Gradle은 솔루션을 제공합니다.
끔찍한 올챙이

@TerribleTadpole 이것이 올바른 해결책입니다. 다른 모든 것은 해결 방법입니다.
jannis

63

감사합니다. 기존 프로젝트를 Gradle로 마이그레이션하고 있었는데 프로젝트 구조를 변경하는 것이 마음에 들지 않았습니다.

이 정보가 초보자에게 유용 할 것이라고 생각했습니다.

다음은 내 'build.gradle'의 샘플 작업입니다.

version = '1.0.0'

jar {
   baseName = 'analytics'
   from('src/main/java') {
      include 'config/**/*.xml'
   }

   manifest {
       attributes 'Implementation-Title': 'Analytics Library', 'Implementation-Version': version
   }
}

34
소스 세트를 재구성하는 것이 더 정확합니다. 같은 것 sourceSets.main.resources { srcDirs = ["src/main/java"]; exclude "**/*.java" }.
피터 Niederwieser

1
감사합니다 @PeterNiederwieser !! 내 log4j.xml 파일을 그림자를 사용하여 빌드하고 있던 실행 가능한 jar에 포함 시키려고했습니다. 나도 오래된 프로젝트를 다루고 있었고 디렉토리 구조를 쉽게 변경할 수 없었습니다. 당신의 제안은 정확히 내가 필요로하는 것이었다 !! : D
Piko

@PeterNiederwieser-Java 플러그인 문서에서 리소스가 이미 * .java를 제외하도록 정의되어 있음을 알았습니다. "자원 만 포함하고 자원 소스 디렉토리에있는 모든 .java 파일을 제외합니다."
Joe Bowbeer 2015-06-08

25

기본적으로 추가하는 모든 파일 src/main/resources은 jar에 포함됩니다.

어떤 이유로 든 해당 동작을 변경해야하는 경우를 구성하여 변경할 수 있습니다 sourceSets.

설명서 의이 부분에는 모든 세부 정보가 있습니다.


4
당신의 이유를 내용 만 알 것 .../resources/대신에의 포함 된 자원 디렉토리 내용을?
sargas

@sargas 모든 컨텍스트를 쉽게 포함 할 수있는 새로운 질문을 시작해야합니다. 댓글 섹션에서 많은 정보를 얻는 것은 어렵습니다. (
geoand

18

나는 같은 문제에 부딪쳤다. Java 패키지에 PNG 파일이 있는데 소스와 함께 최종 JAR로 내 보내지 않아 시작시 앱이 충돌했습니다 (파일을 찾을 수 없음).

위의 답변 중 어느 것도 내 문제를 해결하지 못했지만 Gradle 포럼에서 해결책을 찾았습니다. 내 build.gradle파일에 다음을 추가했습니다 .

sourceSets.main.resources.srcDirs = [ "src/" ]
sourceSets.main.resources.includes = [ "**/*.png" ]

Gradle에 src폴더 에서 리소스를 찾고 PNG 파일 만 포함하도록 요청합니다.

편집 : Eclipse를 사용하는 경우 실행 구성이 손상되고 main class not found프로그램을 실행하려고 할 때 오류가 발생합니다. 이 문제를 해결하려면, 내가 찾은 유일한 해결책은 다른 디렉토리에 이미지 (들)을 이동하는 것입니다 res/예를 들어, 등을 설정하는 srcDirs대신 src/.


2
내가 사용하는 +=기존의 DIRS 내 DIRS를 추가하는 운영자 : 예sourceSets.main.resources.srcDirs += [ "src/main/java" ]
TmTron

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.