|
Maven은 java project library를 관리하고 실행파일의 build를 책임지는 framework다. 메이븐은 리소스 처리와 컴파일 테스트와 패키징까지 애플리케이션의 전체 빌드 주기를 관리해 준다. 더불어 데이터베이스를 업데이트하고 패키징된 애플리케이션을 특정 서버(톰캣 등)에 배포하는 등 다양한 작업을 한다.
실습) 간단한 Application Project(hellomaven)를 작성해 보자.
1) File – New – Maven Project를 선택한다.
2) Create a simple project를 체크하고 다음 작업을 진행한다.
3) Group id(aa.bb.cc)와 Artifact id(spr_pro1)를 입력한다.
Maven에 의해 관리되는 하나의 파일(보통 jar)을 artifact라고 하는데, project 생성 시 Artifact id는 project 이름으로도 적용된다.
4) project가 생성되면 Maven 정보가 설정된 pom.xml이 만들어진 것을 확인 할 수 있다.
https://search.maven.org/ ==> 변경 https://mvnrepository.com/ 에서 다운로드할 spring 라이브러리 버전 정보를 읽어 pom.xml에 추가해 준다.
search : spring-context , search : spring-core
pom.xml을 저장하면 라이브러리가 다운로드 된다.
이 후 Maven에 의해 Maven Dependencies 폴더가 생기고, spring lib가 자동 로딩 된 것을 볼 수 있다.
5) src/main/java와 src/main/resource 폴더에 아래와 같이 코드를 작성하고 실행한다.
😁 SpringFramework으로 객체 관리 간단 예제 ---
HelloInter.java
package pack;
public interface HelloInter {
void sayHello(String name);
}
HelloMaven.java
package pack;
public class HelloMaven implements HelloInter{
public void sayHello(String name) {
System.out.println("안녕하세요 " + name + "씨");
}
}
init.xml 작성 - bean 설정 등의 작업을 진행
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="testbean" class="pack.HelloMaven" />
</beans>
*Annotation을 사용할 경우 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> ... </beans> |
* AOP를 사용할 경우 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> ... </beans> |
HelloMain.java
package pack;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloMain {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:init.xml");
HelloInter inter = context.getBean("testbean", HelloMaven.class);
inter.sayHello("신기해");
}
}
5) 출력 결과
참고 : import javax.annotation.Resource; 에러가 발생하는 경우에는 pom.xml에 아래의 구문을 추가해 주면 된다.
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
각 프로그램 lib 다운로드 maven 설정 참조 : https://mvnrepository.com/
*** spring project(기본) 에서의 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>aa.bb.cc</groupId>
<artifactId>spr_pro1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>6.1.10</version>
</dependency>
<!-- AOP 사용 시 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.22.1</version>
</dependency>
<!-- Spring jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.1.10</version>
</dependency>
<!-- MariaDb driver -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
</project>
*** spring @web project 에서의 pom.xml - MariaDB + MyBatis ***
위 환경 파일에 아래 내용 추가
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.1</version>
</dependency>
*** Oracle일 경우 ***
<!-- oracle jdbc driver -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.1.0.0</version>
</dependency>
*** MySQL일 경우 ***
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
*** @ResponseBody를 이용해 json 형태로 출력 시 ***
<!-- json -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
*** @ResponseBody를 이용해 XML 형태로 출력 시 에러가 발생할 경우 ***
<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0-b170201.1204</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0-b170127.1453</version>
</dependency>
위 코드를 pom.xml 에 추가한다.
참고 :
메이븐 프로젝트 오류 시 참조
이클립스 + 메이븐 + 프레임워크 + 각종 라이브러리로 구성된 전자정부 프레임워크는 사용자의 요구(컴파일, 빌드, 테스트, 배포 등)을 처리하기 위해 수 많은 디스크 I/O와 네트워크 I/O가 발생한다. 그러므로 하나의 프로세스가 처음부터 끝까지 도맡아 수행하지 않음을 짐작할 수 있게 된다. 즉, 선행 작업의 결과를 신뢰한다는 조건 하에 이후 작업들이 이루어져야만 할텐데...
만약, 이클립스, 메이븐, 플러그인, 종속 라이브러리 등의 처리가 원활하게 이루어지지 않거나, 선행작업이 완료되지 않은 상태에서 이후의 처리를 진행하려는 시도가 발생한다면 메이븐의 작업 정보는 꼬이게 되고 심지어 프로젝트 개발 환경이 망가지게 된다. 실행이 되지 않을 뿐만 아니라 컴파일도 되지 않는 상황이 전개되기 때문이다. 이 경우는 다음과 같은 순으로 작업 중인 문제의 프로젝트를 다시 빌드해 볼 필요가 있다.
다음은 Package Explorer에서 수행할 수 있다. (혼선을 피하기 위해 메인 메뉴의 사용 설명은 배제한다)
[1] 프로젝트 -> Run As -> Maven Clean 프로젝트를 선택하고 마우스 우클릭으로 팝업메뉴를 호출한 다음 "Run As"메뉴를 선택한 후, 하위 메뉴의 "Maven Clean"을 호출한다. 결과는 target 폴더 아래에 기존의 작업 결과로 작성된 모든 컴파일 및 빌드 정보들을 삭제함을 확인할 수 있다.
[2] 프로젝트 -> Maven -> Update Project Configuration 프로젝트를 선택하고 마우스 우클릭으로 팝업메뉴를 호출한 다음 "Maven" 메뉴를 선택한 후, 하위 메뉴의 "Update Project Configuration"을 호출한다. 망가진 프로젝트에 대해서 POM.xml에서 정의한 바대로 컴파일러, 빌드패스 등 플러그인의 환경설정을 다시 적용한다.
[3] 프로젝트 -> Maven -> Update Dependencies 프로젝트를 선택하고 마우스 우클릭으로 팝업메뉴를 호출한 다음 "Maven" 메뉴를 선택한 후, 하위 메뉴의 "Update Dependencies"을 호출한다. 사용자가 작업 중인 프로젝트에 대해서 사용 중인 라이브러리(종속 라이브러리)를 점검하여 누락되거나 버전이 맞지 않는 경우 등을 점검한 후 Maven Repository를 새롭게 갱신한다. 즉, 사용자가 사용하는 라이브러리들이 정상적인지 점검한 후, 바로 잡는 것이다. 위 설명은 메이븐의 구버전인 경우에 해당한다. 신 버전인 경우에는 위 메뉴(Update Dependencies)가 존재하지 않는다. 아마도 "Update Project Configuration"만 수행해도 종속 라이브러리들을 갱신/관리하는 듯하다.
[4] 프로젝트 -> Run As -> Maven install 프로젝트를 선택하고 마우스 우클릭으로 팝업메뉴를 호출한 다음 "Run As" 메뉴를 선택한 후, 하위 메뉴의 "Maven Install"을 호출한다.개발 중인 프로젝트에 메이븐을 설치(적용)한다.이때, 현재 프로젝트의 상태를 컴파일하고 배포를 위한 WAR파일까지 생성해 둔다.여기까지만 해도 프로젝트가 정상적으로 컴파일 및 실행이 되기도 한다.
[5] 프로젝트 -> Run As -> Maven Build프로젝트를 선택하고 마우스 우클릭으로 팝업메뉴를 호출한다음 "Run As" 메뉴를 선택한 후, 하위 메뉴의 "Maven Build"을 호출한다. 프로젝트 환경설정 정보를 이용하여 Maven으로 프로젝트를 다시 한번 빌드 하는 것이다. 굳이 필요하지 않을 수 있으나, 간혹 수행해야 할 때도 있다.
[6] 프로젝트 -> Run As -> Run on Server 프로젝트를 선택하고 마우스 우클릭으로 팝업메뉴를 호출한 다음 "Run As" 메뉴를 선택한 후, 하위 메뉴의 "Run on Server"을 호출한다. 프로젝트를 실행하는 것이다. 물론, 위에서 설명하지 않은 다른 방법으로 실행해도 된다.
위의 방식대로 대처하면 발생하는 오류에 대해서 대체로 복구 할 수 있다.
참고 : Gradle
그래들(이하 Gradle)은 그루비(Groovy)를 기반으로 한 빌드 도구이다. Ant와 Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구이다.
메이븐(Maven)과 그래들(Gradle)의 개념 및 비교 : https://dev-coco.tistory.com/65