☭DEVELOPER/#2 웹개발(자바기반 풀스택)

[BACKEND]Maven

조반짝 2023. 9. 19. 09:33
728x90
반응형

※ Maven 이란?

빌드도구 : maven , 라이브러리를 쉽게 가져다 쓸 수 있다.


1 빌드란?
  1) 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로
     변환하는 과정 또는 결과물 완성 단계를 말합니다.
  2) 우리가 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, .jpg, .jar, .properties)을
      JVM이나 톰캣같은 WAS가 인식할 수 있는 구조로 패키징 하는 과정
      또는 결과물 완성 단계라고 할 수 있습니다.

  3)  빌드 도구(Build tool)
     - 빌드 도구란 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램을 말합니다.
     - 빠른기간동안 계속해서 늘어나는 라이브러리 추가, 프로젝트를 진행하며
       라이브러리의 버전 동기화의 어려움을 해소하고자 등장했습니다.
     - 초기의 java 빌드도구로 Ant를 많이 사용하였으나 최근 많은 빌드도구들이 생겨나
        Maven, Gradle 등의 빌드 도구들을 활용하고 있습니다.

  4) Maven은 정해진 라이프사이클에 의하여 작업 수행하며,
     전반적인 프로젝트 관리 기능까지 포함하고 있습니다.
     (Build Tool + Project Management)

  5) Maven 공식 웹사이트 : https://maven.apache.org/

  6) 참고 : Gradle 공식 웹사이트 : https://gradle.org/

  7) Google Trends 비교 분석
      https://trends.google.com/trends/?geo=US 

     - 우측 상단 "미국"을 "대한민국"으로 변경

     - "검색어 또는 주제 입력" 란에 maven, gradle 입력 검색

===================================================================

[중요]
1. Dynamic Web Project 생성 후 jstl1.2.jar 파일 활용하는 "c1_taglib_core_set.jsp" 파일을
   Maven 변환 활용 바랍니다.

[WebContent 폴더 안에 c1_taglib_core_set.jsp 파일 소스 코딩]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri=" http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>c1_taglib_core_set jsp 소스 코딩</title>
</head>
<body>
<%-- <c:set> 태그는 JSTL에서 제공하는 태그이며,
     EL에서 사용할 수 있는 변수를 생성해 주는 기능을 제공합니다. --%>
<%-- <c:set> 태그 기본 사용 방법 --%>
<c:set var="name1" value="장나라" />
${name1}
<br> <hr>
<c:set var="name2">김희선</c:set>
${name2}
<br> <hr>
<c:set var="num1" value="5" />
<c:set var="num2" value="${2}"/>
<c:set var="num3"> 5.2 </c:set>

합은 ${num1 + num2 + num3}
<br> <hr>
</body>
</html>

===================================================================

[중요]
2. 새롭게 SpringMVC Project 생성해서 pom.xml에 jstl1.2 의존성 주입 확인해 봅니다.

===================================================================


※ 참고 사항

Eclipse IDE Dynamic Web Project 를 Maven Project 로 변경

1. Dynamic Web Project (또는 Maven Project) 생성, 프로젝트 이름은 MavenBuild 하기 바람

   - Dynamic Web Project로 생성했을 경우에는 "MavenBuild" 프로젝트

   - 우클릭 - Configure - Convert to Maven Project 클릭

   (우측 하단 Build Progress 진행 완료 돠면, 좌측 pom.xml 파일 생성 확인)

2. Build 도구로 Maven 방식을 활용할 경우, pom.xml 파일에 <dependency> 태그로
   라이브러리를 손쉽게 추가할 수 있음.

   [pom.xml 파일 적용 예시]
   pom.xml 파일 적용할 경우, pom.xml 파일 하단에 </project> 종료 태그 위에
   다음의 jstl 1.2 라이브러리 적용 내용을 넣기 바람.

<properties>
        ...
</properties>

<dependencies>  
<!--https://mvnrepository.com/artifact/javax.servlet/jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>  

<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>

</dependencies>
   <build>
        ...
   </build>
</project>


3. "MavenBuild" 프로젝트에 기존 Web App Libraries가 있을 경우, 재인식을 해줘야 함

   = "MavenBuild" 프로젝트 - 우클릭 - Java Build Path - Add Library... - Web App Libraries 클릭

4. Maven 프로젝트에 붉은색 x표시가 나타날 경우 문제 해결 방법

  1) Maven 프로젝트 클릭 선택 - 마우스 우클릭 - Maven - Update Project... 클릭해서,
     Maven 프로젝트 업데이트 해줘야 함.

  2) 앞서 "1)" 했는데도 문제가 해결 안될 경우, 다음과 같이 pom.xml 파일의 plugin 태그의
     configuration 태그 - source 태그 내용과 target 태그 내용을 현재 사용 JAVA 버전으로 변경해 준다.
     그리고, Maven 프로젝트 클릭 선택 - 마우스 우클릭 - Maven - Update Project... 클릭해서,
     Maven 프로젝트 업데이트 해줘야 함.

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source> <!-- 1.5 를 1.8로 수정해 준다 -->
                    <target>1.5</target> <!-- 1.5 를 1.8로 수정해 준다 -->
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

  3) 앞서 "1)"과 "2)" 했는데도 문제가 해결 안될 경우,
     Maven 프로젝트 클릭 선택 - 마우스 우클릭 - Run As - Maven install 클릭해서,
     Maven 프로젝트 다시 Install 해줘야 함.

     그리고 다시,
     Maven 프로젝트 클릭 선택 - 마우스 우클릭 - Maven - Update Project... 클릭해서,
     Maven 프로젝트 업데이트를 해줌.

==========================================================================

* 4-2) 필수 참고 사항!

Maven의 기본 라이프사이클에서 compile 시기에 실행되는 compiler 플러그인은 별도 설정이 없을 경우,
자바 1.3 버전 기준으로 컴파일 할 소스 코드를 파싱하고 자바 1.1 버전에 호환되도록 클래스 파일을 생성한다.
따라서, 제너릭(generic)이나 어노테이션(annotation)과 같이 자바 5 이상 버전에서만 유효한 문법이 코드에
포함되어 있을 경우 컴파일 과정에서 문법 에러가 발생하게 된다.

maven-compiler-plugin 설정하기

Maven이 기본적으로 사용하는 소스 및 생성 클래스의 자바 버전을 변경하려면 pom.xml 파일에서
maven-compiler-plugin의 <configuration> 영역에서 <source>와 <target>을 이용해서 소스 코드 및
생성 대상 자바 버전을 지정할 수 있다. 아래 코드는 설정 예를 보여주고 있다.

<project>
    ....
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source> <!-- 1.5 를 1.8로 수정해 준다 -->
                    <target>1.5</target> <!-- 1.5 를 1.8로 수정해 준다 -->
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            ...
        </plugins>
    </build>
</project>
만약 소스 코드의 인코딩이 운영체제의 기본 인코딩과 다르다면 <encoding> 속성을 이용해서
소스 코드의 인코딩을 지정해주면 된다.

위와 같이 maven-compiler-plugin 에서 소스 및 대상 자바 버전을 명시하면 eclipse:eclipse를
이용해서 생성한 이클립스 프로젝트도 설정한 자바 버전을 사용하도록 설정된다.

==========================================================================

5. "MavenBuild" 프로젝트 WebContent 폴더에 다음과 같이 Hello.jsp 파일 소스 코딩
  * 중요 : (주의) el 인식 안될 경우, 상단에 다음의 소스 코드 추가해 줌]
  <%@ page isELIgnored="false" %>

========================================================

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri=" http://java.sun.com/jsp/jstl/core " %>

<!-- el 인식 안될 경우, 상단에 다음의 소스 코드 추가해 줌   -->
<%@ page isELIgnored="false" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>

<h1>Hello JSP!!</h1>
Hello! java Server Pages.
<br><br>
<c:set var="name1" value="장나라" />
${name1}
<br><br>

<c:set var="name2" value="김유신" />
${name2}
<br><br>

<c:set var="num1" value="5" />
<c:set var="num2" value="${2}" />
<c:set var="num3"> 5.2 </c:set>
합은 ${num1 + num2 + num3}<br>

</body>
</html>

6. WAS 설치 : ApacheTomcat v9.0.37

7. Eclipse에서 WAS 구동 환경 셋팅 후 Hello.jsp - 우클릭 - Run As - Run On Server 실행 확인

=============================================================================================

※ 중요 : Eclipse IDE Maven Project 신규 생성 (라이브러리 추가 및 제거 방법 포함)

1) File - New - Maven Project - Use default Workspace location 체크 확인(다른 옵션 체크해도 됨) - Next - 
   Filter: 란에 webapp - Artifact Id 칼럼에 maven-archetype-webapp 선택 - Next
   Group Id: 란에 Layout 입력, Artifact Id: 란에 Maven 입력 - Next

2) Maven 프로젝트 - 우클릭 - Java Build Path - Libraries - Add Library... - Server Runtime - Next - Apache Tomcat v9.0 선택 - Finish 클릭

3) JRE System Library - Alternate JRE: 란에서 jdk1.8.0_221 선택 - Finish

4) Add Library... - Web App Libraries 선택 - Next - Finish 클릭 - Apply - Apply and Close 클릭

5) Project Facets - Java - Version 1.8 선택 - Runtimes 탭에서 Apache Tomcat v9.0 체크 - Apply - Apply and Close

6) webapp 폴더에 있는 index.jsp - 우클릭 - Run As - Run On Server 실행 확인(Hello World! 메시지 출력 확인)

7) Maven 라이브러리 추가(예시) : 다음과 같이 Maven Repository 웹사이트에서
   <dependency> 태그 내용 추가( 또는 파일 다운로드 추가)도 가능함

   https://mvnrepository.com/artifact/javax.servlet/jstl/1.2웹사이트 - Maven 탭 - <dependency> 태그 내용을

    pom.xml 에 등록해 줌 (또는 jar 파일 다운로드 추가도 가능함)

    또는

    Maven 프로젝트에서 마우스 우클릭 - Maven - Add Dependency - Enter grouId, ... 입력란에

    log 검색 - log4j 선택 - OK 설치

8) Maven 라이브러리 제거(예시) : 여러가지 방법이 있음.

   [첫번째 방법]  Maven Project - Java Resources - Libraries

    - Maven Dependencies - 해당 jar 파일 선택 - 우클릭 - Maven - Exclude Maven Artifact - OK 클릭

   [두번째 방법] pom.xml 파일에서 제거하고 싶은 라이브러리의 <dependency> 태그 제거 후
       
                    Maven 프로젝트 - 우클릭 - Maven - Update Project... 클릭

                   (보통은 pom.xml 파일에서 라이브러리 제거하면, 자동으로 Update 되어 라이브러리가 제거됨)

 

Maven – Welcome to Apache Maven

Welcome to Apache Maven Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. If you

maven.apache.org


<c:set> 태그는 JSTL에서 제공하는 태그이며,  EL에서 사용할 수 있는 변수를 생성해주는 기능을 제공합니다!

 

<c:set> 태그 기본 사용 방법

jar 라이브러리 복사해서 sts - WEB-INF - lib에 붙여넣기

라이브러리 연결하기

서버 연결하기

jar가 없어도 웹에서 끌어서 사용해주는 것이 build 도구이다.

https://mvnrepository.com/

jstl 검색

저장하면 자동으로 maven dependencies 가 생성되었다.

<index.jsp>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebContent 폴더 안에 index.jsp 소스 코딩</title>
</head>
<body>

	<%-- <c:set> 태그는 JSTL에서 제공하는 태그이며,
	     EL에서 사용할 수 있는 변수를 생성해주는 기능을 제공합니다! --%>
	<%-- <c:set> 태그 기본 사용 방법 --%>
	<c:set var="name1" value="장나라" />
	${name1}
	<br> <hr>
	<c:set var="name2">김희선</c:set>
	${name2}
	<br> <hr>
	<c:set var="num1" value="5"/>
	<c:set var="num2" value="${2}"/>
	<c:set var="num3">5.2</c:set>

	합 = ${num1 + num2 + num3}

</body>
</html>

<maven_test/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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>MAVEN_TEST</groupId>
  <artifactId>MAVEN_TEST</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <dependencies>
  			<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
			<dependency>
			    <groupId>javax.servlet</groupId>
			    <artifactId>jstl</artifactId>
			    <version>1.2</version>
			</dependency>
  </dependencies>
  
  
  
  
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.3</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

 

 

728x90
반응형