maven Archetype을 새로 만들고 nexus repository에 등록하기
개요
자주 쓰는 maven 프로젝트 템플릿이 있다면 maven archetype 으로 등록하고 archetype:generate 를 이용하여 재활용할 수 있다.
새로운 archetype 을 등록하는 작업은 생각보다 단순하고 쉽다.
작업 단계
크게 다음 4단계의 절차를 통해 새로운 archetype 을 만들고 추가할 수 있다.
- archetype descriptor(파일명: archetype-metadata.xml, 위치: src/main/resources/META-INF/maven/) 만들기. 이 파일에는 archetype 생성시 필요한 정보가 들어간다.
generate시 archetype plugin에 의해 복사되는 prototype files 만들기(위치: src/main/resources/archetype-resources/)
- prototype pom 파일 만들기 (파일명: pom.xml, 위치: src/main/resources/archetype-resources)
- a pom for the archetype (pom.xml in the archetype's root directory).
맨땅에서 archetype 생성하기
실제로 archetype 을 추가할때는 기존 프로젝트를 기반으로 하는게 좋으나 archetype 생성에 대한 이해를 높이기 위해 아무것도 없는 상태에서 생성하는 걸 설명한다.
새로운 archetype 을 위한 프로젝트 폴더를 생성한다. 편의상 폴더명은 my-archetype-first 으로 한다.
mkdir my-archetype cd my-archetype
CODEarchetype artifact 용 pom 파일을 생성한다. 위치는 일반 pom 처럼 현재 위치에 놓는다
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lesstif.archetypes</groupId> <artifactId>my-first-archetype</artifactId> <version>1.0-SNAPSHOT</version> <packaging>maven-archetype</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <extensions> <extension> <groupId>org.apache.maven.archetype</groupId> <artifactId>archetype-packaging</artifactId> <version>2.2</version> </extension> </extensions> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-archetype-plugin</artifactId> <version>2.2</version> <extensions>true</extensions> </plugin> </plugins> </pluginManagement> </build> </project>
XMLgroupId, artifactId, version는 archetype:generate 시에 다음과 같이 전달될 파라미터이므로 주의깊게 설정한다.
-DarchetypeGroupId=${groupId} -DarchetypeArtifactId=${artifactId} -DarchetypeVersion=${version}
src/main/resources/META-INF/maven/archetype-metadata.xml 에 archetype descriptor 파일을 생성한다.
mkdir -p src/main/resources/META-INF/maven/ vi src/main/resources/META-INF/maven/archetype-metadata.xml
CODEsrc/main/resources/META-INF/maven/archetype-metadata.xml
<?xml version="1.0" encoding="UTF-8"?> <archetype-descriptor xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xmlns:xsi="http://www.w3.org/ 2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.a pache.org/xsd/archetype-descriptor-1.0.0.xsd" name="my-first-archetype"> <fileSets> <fileSet filtered="true" packaged="true" encoding="UTF-8"> <directory>src/main/java</directory> <includes> <include>**/*.java</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory>src/main/webapp</directory> <includes> <include>**/*.jsp</include> <include>**/*.xml</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </fileSet> <fileSet filtered="true" packaged="true" encoding="UTF-8"> <directory>src/test/java</directory> <includes> <include>**/*.java</include> </includes> </fileSet> </fileSets> </archetype-descriptor>
XMLname="my-first-archetype" 부분은 archetype 검색시 표시될 이름이다.
archetype에 포함시킬 파일들은 src/main/resources/archetype-resources 폴더밑에 위치해야 한다. 해당 폴더를 생성한다.
mkdir -p src/main/resources/archetype-resources/src/{main,test}/java
CODEarchetype 에 포함시킬 예제 소스 파일을 생성한다.
예제 소스src/main/resources/archetype-resources/src/main/java/App.java
package $package; /** * Hello world! */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } }
CODE예제 테스트 케이스 추가
src/main/resources/archetype-resources/src/test/java/AppTest.java
package $package; import org.junit.Test; import static org.junit.Assert.*; /** * Unit test for simple App. */ public class AppTest { @Test public void testApp() { assertTrue( true ); } }
CODEprototype pom.xml 을 생성한다. 이 파일은 mvn archetype:generate 로 생성된 프로젝트에 포함되는 pom.xml 이다. 자주 쓰는 dependency 나 repository 등 프로젝트에 필요한 내용을 추가한다.
artifactId and groupId 는 프로젝트마다 동적으로 생성되어야 하므로 pom 파일에는 variable 로 기술한다.src/main/resources/archetype-resources/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>${groupId}</groupId> <artifactId>${artifactId}</artifactId> <version>${version}</version> <packaging>jar</packaging> <name>A custom project</name> <url>http://www.myorganization.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8</version> <scope>test</scope> </dependency> </dependencies> </project>
XML- mvn install 을 실행해서 local repository 에 archetype 을 등록한다.
mvn archetype:generate 를 실행한다.
mvn -DarchetypeCatalog=local archetype:generate \ -DarchetypeGroupId=com.my.archetypes \ -DarchetypeArtifactId=my-first-archetype \ -DarchetypeVersion=1.0-SNAPSHOT \ -DgroupId=<my.groupid> \ -DartifactId=<my-artifactId>
CODE- 제대로 생성되었는지 확인후 제대로 되었다면 mvn deploy 로 해당 archetype 을 사용하는 nexus repository 에 등록한다.
기존 프로젝트로부터 생성하기
mvn archetype:create-from-project 을 사용하여 기존 프로젝트에서 생성할 수 있다.
- 기존 mvn 프로젝트로 이동 (Ex: cd my-maven-proj)
archetype 프로젝트 생성
mvn archetype:create-from-project
CODE- maven archetype 프로젝트는 target/generated-sources/archetype 에 생성된다.
- cd target/generated-sources/archetype
- mvn install 로 local repository 에 추가
추가한 archetype 으로 부터 프로젝트 생성
mvn archetype:generate -DarchetypeCatalog=local
CODE- 정상적으로 동작한다면 mvn deploy 에 nexus repository 에 배치
같이 보기
참고
- http://maven.apache.org/archetype/archetype-models/archetype-catalog/archetype-catalog.html
- https://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-metadata.html
- http://maven.apache.org/guides/mini/guide-creating-archetypes.html
There is no content with the specified labels