2010년 KSUG Maven 강의 문서

Report
자바 세상을 빌드하는 Maven
박재성
2010.04.17
Talk 목표
Maven에 대한 기본적인 이해
Maven을 활용한 사내 표준화 전략
나의 꿈 이야기 - 하나
아!! 똑같은 삽질 정말 싫다.
Spring
Hibernate
한방에 프로젝트 세팅 완료
Struts2 Spring
Hibernate
한방에 프로젝트 세팅 완료
나의 꿈 이야기 - 둘
프로젝트 구조
Common
Dependency
Dependency
Dependency
Dependency
A
B
Dependency
C
Dependency
Dependency
D
E
Dependency
Dependency
Dependency
Dependency
Project A
Dependency
Dependency
Dependency
Dependency
Dependency
Example : Spring 라이브러리 추가 또는 변경 과정
http://www.springframework.org
접근
라이브러리에 버전 번호가 있는
경우 클래스패스 수정
추가 또는 변경할 라이브러리를
찾아 프로젝트로 복사
Download 페이지에서 Spring
라이브러리 다운로드
압축을 푼다
아!! 힘들다. 좀 편하게 살자.
나의 꿈 이야기 - 셋
개발자
 개발 서버
소스 코드 Commit
모니터링
소스 코드 Checkout
개발자
소스 코드 Commit
빌드
최신 기능 테스트
기획자
최신 기능 테스트
QA
최신 기능 테스트
최신 소스 배포
•
•
•
•
데이터베이스 초기화
단위 테스트
기능 테스트
Report 사이트 생성
나는 Commit만 하고 싶다.
Maven 이야기
Ant vs Maven
Jdbc vs Spring Jdbc
Convention over Configuration
출처 : http://www.slideshare.net/carlo.bonamico/maven-2-in-the-real-world-presentation
Maven 이야기
- Single Project
2007.11.01
Antlib
http://ant.apache.org/manual/CoreTypes/antlib.html
Demo 1 – 프로젝트 만들기
super-pom
mvn help:effective-pom
your-pom
super-pom
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<outputDirectory>target/classes</outputDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
...
</build>
<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
</repository>
</repositories>
super-pom
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-2</version>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
...
</plugins>
</pluginManagement>
Demo 2 – Super POM
Lifecycle &
Plugins
출처 : http://www.sonatype.com/books/mvnex-book/reference/simple-project-sect-lifecycle.html
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
[...]
</project>
mvn groupID:artifactID:version:goal
mvn org.apache.maven.plugins:maven-compiler-plugin:2.1:compile
mvn org.apache.maven.plugins:maven-compiler-plugin:compile
artifactId : "maven-$name-plugin”, "$name-maven-plugin"
mvn org.apache.maven.plugins:compiler:compile
settings.xml
<pluginGroups>
<pluginGroup> org.apache.maven.plugins</pluginGroup>
</pluginGroups>
mvn compiler:compile
• Apache Maven 사이트: http://maven.apache.org/plugins/
• Codhaus Mojo 프로젝트: http://mojo.codehaus.org/plugins.html
Demo 3 – Lifecycle & Plugin
Dependency
Local : C:\Documents and Settings\${user.id}\.m2
Central :http://repo1.maven.org/maven2
출처 : http://www.slideshare.net/carlo.bonamico/maven-2-in-the-real-world-presentation
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
C:\Documents and Settings\${user.id}\.m2\repository\junit\junit\3.8.1\junit-3.8.1.jar
Demo 4 – Dependency
이클립스와 Maven
mvn eclipse:eclipse
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
<wtpversion>2.0</wtpversion>
<wtpContextName>/</wtpContextName>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
</configuration>
</plugin>
m2eclipse
http://m2eclipse.sonatype.org/
Demo 5 – eclipse
Profile
환경에 따라 달라지는 설정 정보
• 데이터베이스 설정 정보
• Logging 설정 정보.
• 프레임워크와 관련한 설정 정보
• 서버에 대한 설정 정보
<project>
[...]
<profiles>
<profile>
<build>
<defaultGoal>...</defaultGoal>
<finalName>...</finalName>
<resources>...</resources>
<testResources>...</testResources>
<plugins>...</plugins>
</build>
<reporting>...</reporting>
<modules>...</modules>
<dependencies>...</dependencies>
<dependencyManagement>...</dependencyManagement>
<distributionManagement>...</distributionManagement>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<properties>...</properties>
</profile>
</profiles>
</project>
Profile 사용
mvn test –P local
mvn test –P development
Demo 6 – profile
데이터베이스 테스트를
효율화하고 싶은데..
Maven sql 플러그인 활용
(http://mojo.codehaus.org/sql-maven-plugin/)
Table Drop => Table 생성
데모를 위해서 주말 내내 작성했는데~~
작성한 문서 모두 날라갔어요 ㅠ..ㅠ
- 나 기획자
Maven Carbon Five 플러그인 활용
http://code.google.com/p/c5-db-migration/
Demo 7 – database
Maven 이야기
- Multi Project
wiki-core
Dependency
wiki-web
Dependency
wiki-admin-web
Jdepend Report
Inheritance,
Aggregation,
Dependency
Inheritance
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>net.javajigi</groupId>
<artifactId>wikibook</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>net.javajigi</groupId>
<artifactId>wiki-web-parent</artifactId>
<version>1.0-SNAPSHOT</version>
[...]
</project>
Aggregation
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>net.javajigi</groupId>
<artifactId>wikibook</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>wiki-core</module>
<module>wiki-web</module>
<module>wiki-admin-web</module>
</modules>
[...]
</project>
Dependency
<project>
[...]
<groupId>net.javajigi</groupId>
<artifactId>wiki-web</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>net.javajigi</groupId>
<artifactId>wiki-core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
Demo 8 – multi module
Maven 이야기
- 전사 표준
• 모든 프로젝트는 Maven 빌드툴 기반으로 진행한다.
• JDK는 1.6(또는 6.0) 기반으로 진행한다.
• 애플리케이션 전반에 걸쳐서 기반이 되는 프레임워크는 Spring 프레임워크
• Persistence Layer는 IBatis 프레임워크와 Hibernate프레임워크
• Presentation Layer는 Struts2 프레임워크와 Spring MVC 프레임워크
• 모든 배치 작업은 Spring Batch로 통일하고, 스케줄링은 Quartz 프레임워크
mvn archetype:create-from-project
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>net.javajigi.san</groupId>
<artifactId>san-samples-ibatis-archetype</artifactId>
<version>1.0</version>
<packaging>maven-archetype</packaging>
<name>san-samples-ibatis-archetype</name>
[...]
</project>
mvn archetype:generate -DarchetypeGroupId=net.javajigi.san
-DarchetypeArtifactId=san-samples-ibatis-archetype -DarchetypeVersion=1.0
-DremoteRepositories=http://localhost:8080/content/groups/public/
Demo 9 – Archetype
마치며..

similar documents