Wookim

maven 태그 정리 본문

programming language/Java

maven 태그 정리

개발자인 경우 2020. 5. 26. 10:55

<parent>

  • 해당 태그에 명시된 프로젝트의 자식 프로젝트임을 명시

예제

 

 

<parent>

    <groupId>{부모 그룹 아이디}</groupId>

    <artifactId>{부모 아티펙트 아이디}</artifactId>

    <version>{부모 버전}</version>

</parent>

 

<groupId>{부모 그룹 아이디}.{부모 아티펙트 아이디}></groupId>

<artifactId>{해당 프로젝트 아티펙트 아이디}</artifactId>

<version>{해당 프로젝트 버전}</version>

 

위 태그들 중 자기 자신의 <groupId> 를 잘 볼것.

"부모 그룹아이디 + . + 부모 아티펙트 아이디" 로 구성했다.

이렇게 하면 nexus에 jar를 배포할 때 트리구조로 예쁘게 배포된다.

 


<modules>

  • 자식 프로젝트들을 명시 = 자식 프로젝트들의 부모임을 명시

에제

    <modules>

        <module>common</module>

        <module>core</module>

        <module>module1</module>

    </modules>

 

위 태그들에 명시된 common, core, module1은 현재 프로젝트들의 자식(sub module) 프로젝트 들이다.

 


<packaging> 

  • 패키지 되는 형식을 지정하는 태그

예제

ex 1). <packaging>jar</packaging>

ex 2). <packaging>pom</packaging>

 

1)은 build 태그에서 jar로 배포한다는 설정이 있을 때, jar로 패키지 될것을 명시한 것.

2)은 <modules>태그가 있는 "부모 프로젝트"에 반드시 설정해야 하는 옵션.

 

자식일 때 -> jar

부모일 때 -> pom 으로 설정하면 된다.

 

 

*만약

부모1 -> 부모2 -> 자식1 이런 구조라면 (부모1의 자식 부모2, 부모2의 자식 자식1)

 

부모1 : 부모2 <modules>에 명시 : pom

----------------------------------------------

부모2 : 부모1 <parent>에 명시    : pom

부모2 : 자식1  <module> 명시

----------------------------------------------

자식1 : 부모2 <parent> 명시)   : jar


<properties>

  • 프로퍼티가 명시된 pom.xml 파일에서 변수처럼 사용 가능한 프로퍼티

예제

    <properties>

        <mainClassPath>com.encore.dcs.Main</mainClassPath>

    </properties>

 

특정 pom.xml에서 위처럼 작성한 <propetises>안의 태그는 

같은 pom.xml에서 <어떤태그>${mainClassPath}</어떤태그> 

이렇게 변수 처럼 사용 가능하다.

 

다른 pom.xml의 propeties 사용하는 방법은

참조하려는 pom.xml 파일의 경로를

사용하려는 pom.xml에 설정해야 하는것 같다.

이건 다음에...

 


<build>

  • 필자가 가장 중요한 태그로 생각하며, 여러가지 아파치 maven plugin들을 사용할 수 있다.
  • build 태그를 이해해야 어느정도 산출물(jar, zip, war, ...)을 원하는 내용으로 설정 가능하다.
  • 해당 태그는 build 빌드(complie + link + deploy) 과정을 컨트롤 한다.
  • build 태그 하위에 사용되는 다양한 태그들이 존재한다. 자주 사용하는 태그들에 대해 알아보자.

예제

<build>

     <resources>

        <resource>

            <directory>{리소스폴더경로}</directory>

 

        </resource>

     </resources>

</build>

 

resource 태그와 diretory 태그

build 태그 안에 위처럼 작성하면, 

2가지 상황이 벌어진다.

 

  1. 개발 환경(IDE)에서 해당 경로를 자동으로 resource 경로로 설정한다.
  2. 배포를 한다면, 해당 디렉토리의 파일들이 포함된다.

예를 들어

 

(1) 이클립스에서 개발중이다.

(2) 해당 경로에 .xml 파일 혹은 .propeties 파일이 있다.

(3) 해당 파일들이 프로그램이 실행되기 위해 필요 하다.

 

위와 같은 상활일 때, 예제의 코드 처럼 설정하면,

이클립스에서 실행 시 소스파일들이 해당 파일들(xml, properties)을 참조할 수 있다. 

 

또 jar로 패키지 될떄 해당 파일들이 jar안에 같이 말려서 배포된다.

만약 jar로 패키지 될때 빼거나 넣고 싶은 파일이 있다면 다음 태그를 살펴볼것.

 


<includes> & <excludes>

  • 패키징 될 때 포함하거나 제외할 파일 혹은 파일 양식들을 설정할 수 있다.

예제

    <build>

        <resources>

            <resource>

                <directory>resources</directory>

                <includes>

                    <include>**/*.xml</include>

                </includes>

            </resource>

            <resource>

                <directory>conf</directory>

                <excludes>

                    <exclude>*</exclude>

                </excludes>

            </resource>

        </resources>

    </build>

 

위 코드를 살펴보면 resources라는 폴더를 리소스 경로로 추가했고 

 

<includes>

  <include>**/*.xml</include>

</includes>

 

처럼 설정한 부분이 있다. 

이는 resources 폴더 하위 모든 경로의 xml 파일을 jar로 패키지 할 때 추가하라는 의미이다.

 

 

반면 conf라는 폴더를 리소스 경로로 추가한 부분 을 보자

 

            <resource>

                <directory>conf</directory>

                <excludes>

                    <exclude>*</exclude>

                </excludes>

            </resource>

 

이는 conf 폴더를 리소스 경로로 추가하고 

jar로 배포 될 떄 conf 폴더 하위 모든 파일들은 제외하라는 의미이다.

 

위 두가지 코드를 이용해 원하는 대로 활용하면 된다.

 

정리

      1.개발 환경에서 실행 -> 리소스 경로 참조 가능

      2. jar로 배포            -> 리소스 폴더가 jar에 포함됨


<sourceDirectory>

  • 소스 파일 경로를 설정
  • 해당 경로의 소스코드들을 컴파일 및 배포

예제

<build>

   <sourceDirectory>src/</sourceDirectory>

</build>

 

위처럼 설정 하면 src 경로의 모든 소스코드들은 서로 참조가능하다. (개발시 에만.. jar로 실행 시에는 다른 설정 필요)

배포 시 src안의 폴더 구조를 유지한 채 소스코드들이 class로 jar안에 포함된다.

 

 

Comments