2010년 KSUG Maven 강의 문서

Download Report

Transcript 2010년 KSUG Maven 강의 문서

자바 세상을 빌드하는 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
마치며..