eclipes4j's 개발은 언제나 즐겁다.

Mac java version 전환하기

Programming!

팀에서 신규플젝을 진행하게 되어 새롭게 시작하는 김에 까짓 java version도 올리자!! 라는 생각으로 11 로 환경을 맞추고 있다.


뚜시궁!! Spring Boot 2.1.x + JAVA(OpenJDK) 11



# brew upgrade

# brew update


# brew cask info java

java: 11.0.1,13



# brew cask install java


# /usr/libexec/java_home



# vi ~/.bashrc 또는 ~/.zshrc 또는....


하단에 아래처럼 추가해 준다.


alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"

alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"



이제 터미널에서 alias를 실행 시키면서 java version을 전환할 수 있다.


# j8


# j11




List<Order>의 Order 내 List<OrderItem>을 갖는 경우 OrderItem 기준으로 List 생성

Programming!


public class Order {

    private Long id;

    private List<OrderItem> orderItems;

}



List<Order> orders = ....


위와 같이 Order 에 대한 List를 있을 경우, OrderItem을 꺼내 새로운 List<OrderItem>를 만들고 싶을 경우가 있다.

해서 1차적으로 

List<OrderItem> orderItems = new ArrayList<>();

for (orders...) {

    for(o.getOrderItems()...) {

       ... orderItems.add(oi);

    }

}


위와 같은 형태로 중복 for 문을 생각해볼 수도 있을 것이고. 이후,

List<OrderItem> orderItems = new ArrayList<>();

orders.stream().foreach(o->{    

    List<OrderItem> orderItems = o.getOrderItems().stream().map(..).collect(Collectors.toList())

    orderItems.addAll(orderItemDtos);

});


이렇게 stream과 foreach를 이용해 어정쩡하게 할 수도 있겠지만.. 그냥 flatmap을 이용하는 방법이 가장 좋다.

List<OrderItem> orderItems = orders.stream().flatMap(o -> o.getOrderItems().stream()).collect(Collectors.toList());



근데 병렬로 하는게 빠르려나..쩝

eclipse 에서 gradle querydsl 소스 생성시 dupulicate entry 문제

Programming!

eclipse 에서 gradle querydsl 소스 생성시 dupulicate entry 문제



뭐 딱히 generate task 를 만들지 않고 아래처럼 돌렸을 경우 eclipse에서는 정상적으로 생성된 클래스에 대한 classpath가 등록되는데,

querydsl {

    library = "com.querydsl:querydsl-apt:${querydslVersion}"

     ...


}


idea에서는 화면에 물려있는 classpath가 실제 build를 돌리면 generate-sources를 인식하지 못한다. 해서 intellij기준으로 맞추면 eclipse에서 중복된 classpath 등록 오류가..


여튼 작업자들이 idea를 사용하니 idea기준으로 작업환경을 유지해 주는 것으로 하기위해 eclipse 에 대한 glradle 로직을 추가했다.

....

eclipse.classpath.file {

  whenMerged { classpath ->

    def cpath = classpath.entries.findAll {

    entry -> entry.kind == 'src' && entry.output == 'bin/querydsl'

      }

      classpath.entries.removeAll (cpath)

  }

}