Maven 프로젝트 중 resources 설정 요약
보통 Maven 프로젝트 의 파일 디 렉 터 리 구 조 는 다음 과 같 습 니 다.
# Maven
src
main
java #
resources #
filters #
config #
scripts #
webapp #web
test
java #
resources #
filters #
it #
assembly #assembly descriptors
site #Site
target
generated-sources
classes
generated-test-sources
test-classes
xxx.jar
pom.xml
LICENSE.txt
NOTICE.txt
README.txt
그 중에서 src/main/resources
과 src/test/resources
은 자원 파일 디 렉 터 리 입 니 다.본 고 는 자원 파일 과 관련 된 설정 을 상세 하 게 소개 할 것 이다.제1 부분 기본 설정 소개
우 리 는 Maven 구성 요 소 를 사용 하여 프로젝트 를 구축 할 때 보통 프로필 을 자원 파일 디 렉 터 리 에 놓 습 니 다.이 디 렉 터 리 에 대해
pom.xml
파일 에 대해 정 의 를 내 렸 습 니 다.우 리 는 먼저 사례 를 보 겠 습 니 다.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>application.properties</exclude>
</excludes>
</resource>
</resources>
</build>
<directory>
지정 자원 파일 디 렉 터 리; <include>
지정 자원 파일 디 렉 터 리 중 어떤 파일 이 포장 되 었 습 니까?<excludes>
지정 자원 파일 디 렉 터 리 중 어떤 파일 이 포장 되 지 않 습 니까?<filtering>
은 bool
값 이 고 기본 값 은 false
입 니 다.maven 자원 파일 에서 자원 파일 과 같은 변 수 를 사용 할 수 있 습 니 다.
# application.properties
application.user=${username}
application.password=${password}
파일 에서 placeholder
자리 표시 자 를 사용 하여 변 수 를 표시 합 니 다.이 때 ${keyword}
파일 에서 변수의 값 을 정의 할 수 있 습 니 다.
<properties>
<username>mysql</username>
<password>password123</password>
</properties>
설정 파일 의 변 수 를 실제 값 으로 바 꾸 려 면 pom.xml
을 열 어야 합 니 다.이 값 은 <filtering>
으로 설정 되 어 있 습 니 다.제2 부분 구체 적 인 설정 과 주의사항
2.1 사례 설명
위의 소개 에 따 르 면 처음에 예 에서
true
의 배치 설명 이 있 는데 각각 의 미 는 다음 과 같다.resource
에서 다른 파일 을 걸 러 내 고 src/main/resources
파일 만 보관 하 는 것 입 니 다.그리고 application.properties
변수 교체 속성 을 오픈 합 니 다.filtering
에서 src/main/resources
파일 을 걸 러 내 고 다른 파일 은 모두 보존 한 다 는 것 입 니 다.또한 application.properties
변수 교체 속성 을 닫 습 니 다.filtering
은 모두 자원 디 렉 터 리 <resources>
에 대한 설정 정의 이 고 하 나 는 <src/main/resources>
을 유지 하 는 것 이 며 하 나 는 application.properties
을 제거 하 는 것 이다.이렇게 두 설정 이 충돌 하지 않 습 니까?실제로 두 설정 은 호 환 됩 니 다.마지막 으로 두 개의 설정 을 각각 걸 러 낸 파일 집합 을 합 친 것 입 니 다.예 를 들 어 자원 디 렉 터 리
application.properties
에 세 개의 파일 이 있 습 니 다.
application.yml
application.properties
application.xml
컴 파일 후 src/main/resources
경로 에 세 개의 프로필 이 있 습 니 다.첫 번 째 프로필 필터 후 파일 집합 은 target/classes
이 고,두 번 째 프로필 필터 후의 집합 은 {application.properties}
이 며,마지막 으로 집합 을 취하 면 최종 컴 파일 결 과 를 얻 을 수 있 습 니 다.2.2 정규 필터
자원 디 렉 터 리 에 있 는 파일 을 필터 할 때 정규 표현 식 도 지원 합 니 다.예 를 들 면:
<include>**/*.xml</include>
이 표현 식 은 자원 디 렉 터 리 아래 의 모든 {application.yml,application.xml}
파일(하위 디 렉 터 리 아래)을 포함 하고 있 음 을 나타 낸다.2.3 변수 자리 차지 문자
여기 서 주로
xml
의 기능 을 가리킨다.예 를 들 어 아래 의 <filtering>
파일 은 연구 개발 xml
을 정의 했다.
<profiles>
<profile>
<id>dev</id>
<properties>
<resource.delimiter>${}</resource.delimiter>
<username>mysql</username>
<password>password123</password>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
설정 에서 정 의 된 <profile>
과 username
두 변수의 값 입 니 다.password
컴 파일 을 사용 한 후 설정 파일 의 자리 표시 자 변 수 는 바 뀌 었 습 니 다.
application.user=mysql
application.password=password123
주의해 야 할 것 은 package -P dev
태그 설정 을 추가 하여 자리 표시 자 형식 을 정의 하 였 습 니 다.가방 에 의존 하 는 다른 <resource.delimiter>
파일 도 자리 표시 자 형식 을 지정 하여 형식 이 일치 하지 않 을 때 가 있다.예 를 들 어 spring boot 는 기본 자리 차지 기호${}을@var@로 바 꾸 었 습 니 다.따라서 배치 하 는 것 을 권장 합 니 다.그렇지 않 으 면 환경 이 오염 되 기 쉽 습 니 다.2.4 잘못된 관점 에 대한 설명
이 주제 에 관 한 글(예 를 들 어
pom
)에서 같은 CSND
에 <resource>
과 <include>
이 존재 한다 고 생각하면 충돌 이 발생 한다.이때 <exclude>
을 기준 으로 한다.이 논점 에 대해 필 자 는 실제 실험 을 했 는데 같은
<exclude>
에서 <resource>
과 <include>
을 동시에 배치 했다.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application.properties</include>
</includes>
<excludes>
<exclude>application.properties</exclude>
</excludes>
</resource>
</resources>
</build>
컴 파일 결과 프로필 이 <exclude>
에 압축 되 지 않 았 습 니 다.이 논점 에 문제 가 있다 는 것 을 설명 하 다.같은 target/classes
에서 두 가지 설정 이 교 집합 되 었 음 을 나타 낸다.2.5 하위 디 렉 터 리
자원 디 렉 터 리 도 하위 디 렉 터 리 를 지원 합 니 다.즉,자원 디 렉 터 리 아래 에 하위 디 렉 터 리 를 만 들 수 있 고 포장 과정 에서 하위 디 렉 터 리 구 조 를 유지 합 니 다.예 를 들 면:
resources
-test
--app.xml
-application.yml
-application.properties
-application.xml
프로젝트 컴 파일 후 하위 디 렉 터 리 에 자원 파일 이 남아 있 으 면 하위 디 렉 터 리 의 구조 도 유 지 됩 니 다.예 를 들 면:
target
-classes
--test
---app.xml
-application.yml
-application.properties
-application.xml
두 번 째 부분 리 소스 자원 읽 기예 를 들 어 우리 의 프로필
resource
형식의 프로필 은 아래 의 문 구 를 사용 하여 읽 을 수 있 습 니 다.방법 1.컴 파일 된 classes 디 렉 터 리 에서 찾 습 니 다.
InputStream is = this.getClass().getResourceAsStream("/" +application.properties);
방법 2,properties
전체 classes 디 렉 터 리 에서 찾기;
InputStream is = this.getClass().getClassLoader().getResourceAsStream(application.properties);
ClassLoader
을 사용 하 는 공구 꾸러미 Java
읽 기:
import java.util.Properties;
Properties properties = new Properties();
InputStream is = this.getClass().getClassLoader().getResourceAsStream(application.properties);
properties.load(is)
// name
System.out.println(properties.get(getProperty("name")))
다른 유형의 프로필 은 독 자 를 읽 으 면 자 료 를 찾 을 수 있 습 니 다.참고 문헌 및 자료
1,Maven Resources 플러그 인,링크:https://maven.apache.org/components/plugins-archives/maven-resources-plugin-2.6/
2.Maven 자원 필터 의 설정,링크:http://c.biancheng.net/view/5285.html
Maven 프로젝트 의 resources 설정 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.Maven resources 설정 에 관 한 더 많은 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 사랑 해 주세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Nexus에서 자체 Maven 리포지토리를 구축하고 sbt에서 사용Scala 현장에서 프로젝트 종속성을 폐쇄된 Maven 리포지토리로 관리할 수 없는가 하는 이야기가 오르기 때문에, 일단 로컬상에서 간이로 검증한 내용을 비망으로 남깁니다. 프로덕션 용 리포지토리 서버는 별도로 현장...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.