메이븐을 사용하여 JAR의 "META-INF/services" 폴더에 구성 파일을 포함하는 방법
저는 메이븐을 이용하여 만든 이클립스의 자바 프로젝트를 진행하고 있습니다.이전 프로젝트의 재활용 코드를 사용하고 있는데, 이 클래스 중 하나가 파일을 찾습니다.META-INF/services특정 이름을 가진 JAR의 폴더를 선택한 다음 이 파일의 텍스트를 구문 분석합니다.이 예제에서는 Java 인터페이스의 이름을 가진 파일을 찾은 다음 파일 내부에서 구현의 클래스 이름을 가져옵니다.
따라서 기본적으로 제가 하려는 것은 JAR의 "METa-INF/services" 폴더에 파일 이름(X)과 텍스트 한 줄(Y)을 포함하는 것입니다.메이븐을 이용해서 해야 할 것 같아요, 아마도 POM 파일에 속성을 지정해서요, 하지만 제 연구는 아무것도 발견하지 못했습니다.메타 파일을 하드 코딩하거나 수동으로 타이핑해서는 안 된다는 것을 알고 있습니다. 그래서 여기서 무엇을 해야 할지 모르겠습니다.
위치를 사용하여 새 원본 폴더 만들기src/main/resources그런 다음 당신의META-INF/services폴더를 저장하고 FQCN(Full-Qualified Class Name) 파일을 저장합니다.그러면 자동으로 jar 파일에 복사됩니다.따라서 FQCN을 사용하는 인터페이스 구현의 경우com.acme.MyInterface다음과 같은 이점이 있습니다.
Project
| src
| | main
| | java
| | [your source code]
| | resources
| | META-INF
| | services
| | com.acme.MyInterface
참고:com.acme.MyInterface는 파일의 이름이며 Java 패키지와 같은 디렉터리 구조가 아닙니다.파일의 이름은 구현 중인 인터페이스의 FQCN이며, 각 구현의 FQCN은 다음과 같이 고유한 줄에 표시됩니다.
com.example.MyInterfaceImpl
com.example.AnotherMyInterfaceImpl
이는 기본 소스 세트가 있는 Gradle 프로젝트에도 적용됩니다.
이렇게 하면 다음을 사용하여 인터페이스의 모든 구현을 로드할 수 있습니다.ServiceLoader:
ServiceLoader<MyInterface> loader = ServiceLoader.load(MyInterface.class);
for (MyInterface service : loader) {
// Prints com.example.MyInterfaceImpl and com.example.AnotherMyInterfaceImpl
System.out.println(service.class.getName());
}
주의할 사항:
- 모든 구현에는 인수가 없는 생성자가 있어야 합니다.
- 모듈 또는 사용자 지정 클래스 로더를 사용하는 애플리케이션은 다음의 오버로드를 사용해야 할 수 있습니다.
ServiceLoader.load
이러한 조건이 적용되지 않을 경우 다른 시스템(예: Spring, EJB 등)으로 전환하는 것이 좋습니다.
기본적으로 Maven은 다음 위치에서 리소스를 찾습니다.
src/main/resources
그러니까 두자.
src/main/resources/META-INF/services
또는 프로젝트에서 표준 디렉터리 구조를 사용하지 않거나 대체 리소스 디렉터리를 사용하려는 경우 POM 파일을 수동으로 지정할 수 있습니다.
를 들어, 당신의 를들어당이, ▁your이.META-INF/services는 라는폴있다니라는 .resources다음과 같이 지정할 수 있는 루트 디렉터리는 다음과 같이 지정할 수 있습니다.
<project>
...
<build>
...
<resources>
<resource>
<directory>resources</directory>
</resource>
</resources>
...
</build>
...
</project>
하여 여러 하여 여러 디렉터리를 할 수 .<resource>요소들.
언급URL : https://stackoverflow.com/questions/17531625/how-to-include-a-config-file-in-the-meta-inf-services-folder-of-a-jar-using-ma
'programing' 카테고리의 다른 글
| Postgre에 데이터베이스가 있는지 확인합니다.셸을 사용한 SQL (0) | 2023.05.12 |
|---|---|
| 원격 오리진이 새 리포지토리에 대한 'git push'에 이미 있습니다. (0) | 2023.05.12 |
| 문자열 공식을 "실제" 공식으로 바꾸는 방법은 무엇입니까? (0) | 2023.05.12 |
| Visual Studio의 ASP가 내장된 HTTPS.NET 개발 서버 (0) | 2023.05.12 |
| 애저 IoT 허브와 애저 IoT 센트럴의 차이점은 무엇입니까? (0) | 2023.05.12 |