Java maven메이븐

김정훈·2024년 5월 21일

Java

목록 보기
37/48

maven

빌드, 의존성(필요한 라이브러리 jar(Java Archive))관리, 배포, 테스트 툴

1. 설치

자바 설치 O
환경 변수 JAVA_HOME

2. maven 프로젝트 생성

mvn archetype:generate
groupId : 소속된 그룹(도메인 방식)
예) org.project
artifactId : 프로젝트 구분 명칭

3.프로젝트 디렉토리 구조

  • 클래스패스 : 클래스 파일을 인식할 수 있는 경로
    • src/main/java : 작성하는 자바코드(.java)
    • src/main/resources : 정적 자원
      • 설정 파일(xml, properties)
      • css, js, 이미지
    • src/test/java : 테스트 자바 코드(.java)
    • src/test/resources : 테스트시 필요 정적 자원

1) pom.xml

maven 설정 파일

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> : 소스 인코딩 
	<maven.compiler.source>17</maven.compiler.source> : 소스 컴파일 자바 버전
	<maven.compiler.target>17</maven.compiler.target> : 배포 파일(jar) 생성시 자바 버전
</properties>

의존성 설정

<dependencies>
			  
</dependencies>	

<plugins> //백그라운드에서 실행 dependencies와 같은 의존성이지만 성격이다름.
  
</plugins>

사용자명/.m2 👉 메이븐 레포지토리 (공유)

  • scope
    • compile (기본값) : 빌드시 포함, 배포시 포함
    • runtime : 빌드시 포함 X, 실행할때는 필요한 라이브러리 👉 (동적 로딩 - Class.forName(...))
    • provided : 개발시에만 필요, 빌드 및 배포시에는 미포함 👉 플랫폼 내에서 제공되는 라이브러리
      예) servlet-api, servlet.jsp-api
    • test : 테스트 시에만 필요한 라이브러리

4. 명령어

  • mvn compile : java 파일 -> class 컴파일 (target 폴더)
  • mvn clean : 컴파일 소스 전체 지우기(target 폴더 삭제)
  • mvn clean compile : 기존 컴파일 소스 삭제 후 다시 컴파일
  • mvn test : 테스트 케이스를 실행(전체)
  • mvn package : 배포 파일 생성(jar)
    compile -> test -> package(jar)
    👉 테스트 미통과시 배포 X
  • mvn clean package : mvn) 기존 컴파일 소스 삭제 후 배포 실행

참고
java -jar 파일명.jar : jar파일 실행

CTRL + SHIFT + B

5. lombok.jar

maven central : 의존성 저장소
mvnrepository

  • @Data
    • @Getter
    • @Setter
    • @Tostring
    • @EqualsAndHashCode
@EqualsAndHashCode
@Getter @Setter @ToString
public class Member {
    private String userId;
    private String userNm;
    private String email;
    private LocalDateTime regDt;
}

생성자

  • @NoArgsConstructor : 기본생성자
  • @AllArgsConstructor : 모든 멤버 변수로 초기화 생성자
  • @RequiredArgsConstructor : 필수 멤버 변수를 생성자 매개변수로 추가
    - @NonNull
    • 멤버 변수를 final(상수)로
@Data
@AllArgsConstructor
//@NoArgsConstructor(access = AccessLevel.PRIVATE) //기본생성자(PRIVATE로 접근제한)
@NoArgsConstructor() //기본생성자
@RequiredArgsConstructor
public class Member {
    @NonNull
    private String userId;
    
    @NonNull
    private String userNm;
    private String email;
    private LocalDateTime regDt;
}
@Data
@RequiredArgsConstructor
public class Board {
    private int seq;
    private final String subject;
    private final String content;
    private String poster;
}

public class Ex02 {
    @Test
    void test2(){
        Board board = new Board("제목", "내용");
        System.out.println(board);
    }
}
  • @ToString.Exclude : toString()에 추가 배재
  • @ToString.Include : toString()에 추가
@Data
@AllArgsConstructor
//@NoArgsConstructor(access = AccessLevel.PRIVATE) //기본생성자(PRIVATE로 접근제한)
@NoArgsConstructor() //기본생성자
@RequiredArgsConstructor
public class Member {
    @NonNull
    private String userId;

    @NonNull
    private String userNm;
    private String email;

    @ToString.Exclude
    private LocalDateTime regDt; //toString 에 배제된다.
}
  • @Builder : 빌더 패턴으로 자동 생성
    빌더 패턴 : 값을 설정 👉 객체를 내부에서 생성 패턴
    내부에서 객체를 생성(외부에서 객체 ❌) 👉 생성자 접근 제어자 private
public class User {
    private String userId;
    private String userNm;
    private String email;
    private LocalDateTime regDt;

    private User(){}

    public static Builder builder(){
        return new Builder();
    }

    @Override
    public String toString() {
        return "User{" +
                "userId='" + userId + '\'' +
                ", userNm='" + userNm + '\'' +
                ", email='" + email + '\'' +
                ", regDt=" + regDt +
                '}';
    }

    public static class Builder{
        private User user = new User();

        public Builder userId(String userId){
            user.userId = userId;
            return this;
        }
        public Builder userNm(String userNm){
            user.userNm = userNm;
            return this;
        }
        public Builder email(String email){
            user.email = email;
            return this;
        }
        public Builder regDt(LocalDateTime regDt){
            user.regDt = regDt;
            return this;
        }

        public User build(){
            return user;
        }
    }
}


public class Ex02 {
    @Test
    void test3(){
        User user = User.builder()
                .userId("USER01")
                .userNm("사용자01")
                .email("User@naver.com")
                .regDt(LocalDateTime.now())
                .build();

        System.out.println(user);
    }
}

@Bulder

@Builder @ToString
public class User2 {
    private String userId;
    private String userNm;
    private String email;
    private LocalDateTime regDt;
}

@Test
    void test4(){
        User2 user = User2.builder()
                .userId("User02")
                .userNm("사용자01")
                .email("user2@naver.com")
                .regDt(LocalDateTime.now())
                .build();
        System.out.println(user);
    }

@Builder에서 기본생성자를 꼭 써야되는 경우

@Builder @ToString
//기본생성자를 꼭 서야되는 경우 @NoArgsConstructor @AllArgsConstructor
@NoArgsConstructor @AllArgsConstructor
public class User2 {
    private String userId;
    private String userNm;
    private String email;
    private LocalDateTime regDt;
}

6. 버전 표기법

1       .18.       30
(Major)  (Minor)   (Patch)

Major - 기존 버전과 호환되지 않은 버전
Minor - 호환성에는 문제가 없는 기능 추가, 수정
Patch - 오류 버그 수정 있는 경우

profile
안녕하세요!

0개의 댓글