Java 프로젝트의 클래스 경로에서 사용 가능한 비 소스 자원을 어떻게 구성합니까?

StackOverflow https://stackoverflow.com/questions/349787

문제

Java로 작성된 소프트웨어 프로젝트에는 종종 프로젝트의 일부이며 클래스 경로에 포함되어야하는 리소스가 있습니다. 예를 들어 일부 템플릿 또는 이미지 (GetResource)를 통해 액세스 할 수 있어야합니다. 이 파일은 생산 된 Jar-File에 포함되어야합니다.

이러한 리소스가 개정 제어 시스템에 추가되어야한다는 것은 분명합니다. 그러나 어떤 디렉토리 에서이 파일을 넣습니까? Java-Source-Files와 평행 또는 필요한 패키지 구조를 재현하는 다른 디렉토리와 병행합니까?

도움이 되었습니까?

해결책

후자의 솔루션 : 소스 코드의 패키지 구조를 모방하는 별도의 디렉토리를 선호합니다. 이런 식으로 그들은 소스 코드를 클로 브러지지 않지만 포장 된 JAR 파일의 컴파일 된 클래스 파일 바로 옆에 있습니다.

다른 팁

Maven SRC/Main/Resources/(Java Code는 SRC/Main/Java/)에 넣습니다. 주된 이유는 Maven이 다양한 언어로 코드를 컴파일 할 수 있고 한 컴파일이 다른 언어로 코드를 컴파일 할 수 있기 때문입니다.

자원의 경우 Maven은 항아리에 추가되기 전에 변수를 대체하므로 "컴파일 된"소스도 있습니다.

개인적으로, 나는 코드의 특정 부분과 밀접한 관련이 있고 너무 많지 않은 경우 소스 코드와 함께 갖는 것을 선호합니다.

그러나 해당 파일에 자체 조직 구조가 있거나 소스 코드를 찾기가 어려워지는 수백 개의 파일이있는 경우 별도의 파일을 찾을 수 있습니다.

그것은 당신의 선호도에 따라 다릅니다. 소스 코드 파일과 혼합되면 패키지 이름 변경과 같은 리팩토링이 더 쉬워집니다 (소스와 함께 Ressources가 소스와 함께 이동함에 따라)가 소수의 아이콘, 이미지 및 현지화 파일보다 더 쉽게 파일을 혼란스럽게 할 수 있습니다.

오늘날 도구를 사용하면 실제로 중요하지 않습니다. Eclipse, NetBeans 또는 다른 도구를 사용하든 소스 코드와 다른 레이아웃이있는 이진 패키지를 가질 수 있습니다. 결국 당신은 당신이 원하는 것처럼 할 수 있습니다.

개인적으로 나는 소스와 리소스를 혼합하지 않으려 고 노력합니다. 일반적으로 자원을 거의 거의 변경하지는 않지만 소스 코드는 매우 자주 발생합니다.

나는 보통 이렇게 간다 :

project/src
project/resources
project/classes
project/lib
project/dist

둘 다 SRC 그리고 자원 패키지 구조와 빌드 파일을 가져 오십시오 클래스 그리고 자원 배치 된 항아리의 입력으로 dist.

내부적으로 실행할 때 ClassPath는 다음과 같습니다. lib; 계급; 자원;

앱에 설치가있는 경우 설치자가 설치에 리소스 디렉토리를 생성하고 설치에 그대로 배치합니다.

빌드 도구가 혼란스럽지 않으면 이러한 것들을 클래스 경로에 넣을 수 있습니다. Eclipse는 JPEG를 컴파일하려고 시도하지 않으며 Ant도하지 않으므로 걱정할 것이 많지 않습니다. 좋은 점은 많은 관련 사항이 있다면 파일 유형이 아닌 기능별로 구성 할 수 있다는 것입니다.

우리는 내가 일하는 곳에서 이것을합니다. 약간의 코드와 소수의 정적 리소스가 필요한 이메일 메시지가 있습니다. 이 모든 것들은 Java 소스 경로의 한 폴더에 함께 유지됩니다. 우리는 다른 나무에없는 한 나무에 불일치 또는 고아 파일과 같은 SRC/Resource Paths와 같은 실수를하지 않고 시스템에서 쉽게 이메일을 추가하고 제거 할 수 있습니다.

이미 말했듯이, 그것은 당신에게 달려 있으며 프로젝트마다 다를 수 있습니다. 예를 들어 창구, 유지하는 것은 매우 평소와 실용적입니다 .html 수업 바로 옆에 파일. 또한 종종 소스 코드와 함께 구성을 유지합니다. META-INF, WEB-INF, 로깅.

Maven이 소스 트리에서 자원을 가져 오려면 다음을 사용하십시오.

<build>
   <resources>
     <resource>
         <directory>src/main/resources</directory>
     </resource>
     <!-- Web - Wicket -->
     <resource>
         <filtering>false</filtering>
         <directory>src/main/java</directory>
         <includes><include>**</include></includes>
         <excludes><exclude>**/*.java</exclude></excludes>
     </resource>
  </resources>

  <testResources>
     <testResource>
         <directory>src/test/resources</directory>
     </testResource>
     <!-- Web - Wicket -->
     <testResource>
         <filtering>false</filtering>
         <directory>src/main/java</directory>
         <includes><include>**</include></includes>
         <excludes><exclude>**/*.java</exclude></excludes>
     </testResource>
  </testResources>

자원을 분리시키는 주된 이유는 작업 역할의 (IMHO) 분리 때문입니다. 예를 들어 번역 팀이있는 프로젝트가있는 경우 코드와 분리 된 문자열과 다른 SCM 권한이있는 리소스를 유지합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top