PMD Plugin 설치

출처 : http://pmd.sourceforge.net/eclipse/

  1. In Eclipse, click on Help -> Install New Software...
  2. Click on Add..
  3. Enter the following:and click OK.
  4. You should see PMD for Eclipse 4. Select the checkbox next to it and click Next >.
  5. You'll need to accept the license and confirm you want to install a plugin that is not digitally signed. Go ahead and install it anyway.
  6. Restart eclipse.



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

PMD 룰셋 적용 및 사용

참고 : http://tyboss.tistory.com/entry/Jenkins-PMD-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0

* 룰셋 다운로드는 참고 사이트에 전자정부에서 사용하는 룰셋 다운로드 가능


[룰셋적용]
1. Window > Preferences 에서 PMD > Rule Configuration
    - Use global rule management 체크
    - 룰 전체 선택 후 삭제
    - Import rule set 버튼 클릭 후 룰셋.xml 선택 후 확인
    - Rule Configuration 화면에서 Check all rules 버튼을 클릭하여 룰 전체 체크
    
[PMD 실행]
1. 검사할 위치 클릭 후 우클릭 PMD > Check Code 클릭
    - 빨강 (High : Blocker) : 심각한 버그가 발생할 수 있는 코드이기 때문에 반드시 Rule 을 준수해야 한다.
    - 하늘 (Medium : High : Critical) : 심각하지는 않지만 버그가 발생할 수 있는 코드이기 때문에 Rule 을 준수해야 한다.
    - 초록 (Medium : Urgent) : 복잡한 코딩, Best Practice 및 보안, 성능 등에 관련 된 내용으로 준수 할 것을 권장한다.
    - 분홍 (Medium Low : Important) : 버그가 아니며 표준, 코딩 스타일, 불필요한 코드 및 미사용 코드에 관련된 내용이다.
    - 파랑 (Low : Warning) : 패키지, 클래스, 필드 등 Naming에 관련된 내용이다.

2. 검사결과 초기화
    - 우클릭 PMD > Clear Violations

3. Report
    - Window > Preferences 에서 PMD > Reports 에서 export 할 report type 선택
    - 프로젝트 선택 후 우클릭 PMD > Generate Reports 클릭
    - 프로젝트/reports 폴더 아래의 파일 확인







출처 : http://mansoo.tistory.com/entry/Eclipse-Referenced-file-contains-errors-%EB%B0%9C%EC%83%9D-%EC%8B%9C


소스 내에는 에러가 없는데 error 나 markers 창에


Referenced file contains errors (
http://tuckey.org/res/dtds/urlrewrite2.6.dtd).  
For more information, right click on the message in the Problems View and select "Show Details..." urlrewrite.xml ......

등과 같은 에러가 발생하는 경우가 있다. 무시하면 아무 문제없지만 난 빨간 X 표시를 그냥 넘어갈 수 있는 성격이 아니라서......

이런 경우에는 

Window > Preferences > General > Network Connections > Cache 에서 해당 url(위 빨간색 부분) 을 지워주면 해결된다.



1. 플러그인 설치
  - Eclipse Marketplace 에서 Eclipse Color Theme 검색

2. 테마선택
  - Window > Preferences 에서 General > Appearance > Color Theme 에서 테마 선택

3. 테마추가
  http://eclipsecolorthemes.org/

- Oblivion2.xml

<?xml version="1.0" encoding="utf-8"?>
<colorTheme id="1" name="Oblivion2" modified="2011-04-28 07:41:35" author="Roger Dudler" website="http://www.rogerdudler.com/?p=362">
    <searchResultIndication color="#000000" />
    <filteredSearchResultIndication color="#000000" />
    <occurrenceIndication color="#000000" />
    <writeOccurrenceIndication color="#000000" />
    <findScope color="#111111" />
    <deletionIndication color="#D25252" />
    <sourceHoverBackground color="#000000" />
    <singleLineComment color="#A8A8A8" />
    <multiLineComment color="#A8A8A8" />
    <commentTaskTag color="#A8A8A8" />
    <javadoc color="#A8A8A8" />
    <javadocLink color="#548FA0" />
    <javadocTag color="#A8A8A8" bold="true" />
    <javadocKeyword color="#EA9C77" />
    <class color="#D25252" />
    <interface color="#D197D9" />
    <method color="#FFFFFF" />
    <methodDeclaration color="#BED6FF" />
    <bracket color="#D8D8D8" />
    <number color="#7FB347" />
    <string color="#FFC600" />
    <operator color="#D8D8D8" />
    <keyword color="#FFFFFF" />
    <annotation color="#FFFFFF" />
    <staticMethod color="#BED6FF" />
    <localVariable color="#79ABFF" />
    <localVariableDeclaration color="#BED6FF" />
    <field color="#BED6FF" />
    <staticField color="#EFC090" />
    <staticFinalField color="#EFC090" />
    <deprecatedMember color="#D25252" strikethrough="true" />
    <enum color="#7FB347" />
    <inheritedMethod color="#BED6FF" />
    <abstractMethod color="#BED6FF" />
    <parameterVariable color="#79ABFF" />
    <typeArgument color="#BFA4A4" />
    <typeParameter color="#BFA4A4" />
    <constant color="#EFC090" />
    <background color="#1E1E1E" />
    <currentLine color="#2A2A2A" />
    <foreground color="#D8D8D8" />
    <lineNumber color="#D0D0D0" />
    <selectionBackground color="#000000" />
    <selectionForeground color="#D0D0D0" />
</colorTheme> 


lombok : http://www.projectlombok.org/

출처 : http://gitblog.ihoney.pe.kr/blog/2013/01/23/use-lombok-annotation-in-java-project/



Lombok을 사용해봅시다.

자바에서 DTO, VO, Domain Object 만들다보면, 멤버필드에 대한 Getter/Setter 메소드, Equals, hashCode, ToString과 멤버필드에 주입하는 생성자를 만드는 코드 등으로 불필요하게 코드가 길어지는 경우를 볼 수가 있다. 불필요하지만 생성해야 하는 코드들을 줄일 수 있는 방법이 있다면, 얼마나 좋을까?

Project Lombok 소개

적용사례

Lombok annotation을 적용하지 않은 현재 스터디에서 사용하는 User domain 코드

package net.slipp.domain.user;

public class User {
  private String userId;
  private String password;
  private String name;
  private String email;

  public User(String userId, String password, String name, String email) {
      this.userId = userId;
      this.password = password;
      this.name = name;
      this.email = email;
  }

  public String getUserId() {
      return userId;
  }

  public String getPassword() {
      return password;
  }

  public String getName() {
      return name;
  }

  public String getEmail() {
      return email;
  }
  
  public boolean matchPassword(String loginPassword) {
      if (loginPassword == null) {
          return false;
      }
      
      return loginPassword.equals(password);
  }
  
  public void update(User user) {
      this.userId = user.getUserId();
      this.password = user.getPassword();
      this.name = user.getName();
      this.email = user.getEmail();
  }
  
  @Override
  public int hashCode() {
      final int prime = 31;
      int result = 1;
      result = prime * result + ((email == null) ? 0 : email.hashCode());
      result = prime * result + ((name == null) ? 0 : name.hashCode());
      result = prime * result + ((password == null) ? 0 : password.hashCode());
      result = prime * result + ((userId == null) ? 0 : userId.hashCode());
      return result;
  }

  @Override
  public boolean equals(Object obj) {
      if (this == obj)
          return true;
      if (obj == null)
          return false;
      if (getClass() != obj.getClass())
          return false;
      User other = (User) obj;
      if (email == null) {
          if (other.email != null)
              return false;
      } else if (!email.equals(other.email))
          return false;
      if (name == null) {
          if (other.name != null)
              return false;
      } else if (!name.equals(other.name))
          return false;
      if (password == null) {
          if (other.password != null)
              return false;
      } else if (!password.equals(other.password))
          return false;
      if (userId == null) {
          if (other.userId != null)
              return false;
      } else if (!userId.equals(other.userId))
          return false;
      return true;
  }

  @Override
  public String toString() {
      return "User [userId=" + userId + ", password=" + password + ", name=" + name + ", email=" + email + "]";
  }
}


Lombok Annotation 적용코드

package net.slipp.domain.user;

import lombok.*;

@AllArgsConstructor
@EqualsAndHashCode
@ToString
public class User {
  
  @Getter
  private String userId;
  @Getter
  private String password;
  @Getter
  private String name;
  @Getter
  private String email;

  public boolean matchPassword(String loginPassword) {
      if (loginPassword == null) {
          return false;
      }
      
      return loginPassword.equals(password);
  }
  
  public void update(User user) {
      this.userId = user.getUserId();
      this.password = user.getPassword();
      this.name = user.getName();
      this.email = user.getEmail();
  }
} 

90라인이 넘는 코드를 30여줄로 1/3 줄일 수가 있다.

설치방법

1. lombok.jar 다운로드
    a.lombok.jar 직접 다운로드
        - http://projectlombok.org/download.html

    b. pom.xml dependency 추가   

<dependencies>
  ...

  <!-- Project lombok -->
  <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>0.11.6</version>
  </dependency>
  ...
</dependencies> 


2. lombok  설치하기
    a. lombok.jar 직접 다운로드의 경우 :
        - 방법1. 다운로드 경로 이동 후 lombok.jar 더블클릭으로 실행
        - 방법2. cmd 창에서 다운로드 경로 이동 후 java -jar lombok.jar 실행

    b. Maven pom.xml에 추가한 경우 : 
        - 설치 경로 이동 : cd ~/.m2/repository/org/projectlombok/lombok/
        - 위(a) 방법1 또는 방법2로 실행

    c. IDE 설치 위치[Specify locaion…]를 검색해서 경로에 추가한다.
   
    d. eclipse.ini or sts.ini 파일 변경되고 동일한 경로에 lombok.jar 추가됨

    e. 별도로 프로젝트 내에 라이브러리를 추가해서 사용할 수도 있겠다.

소스코드에서 Lombok Annotation을 추가해보자

lombok features : http://www.projectlombok.org/features/index.html

  • @Data
  • @Getter/@Setter
    • 접근제어 : AccessLevel[PUBLIC, PROTECTED, PACKAGE, PRIVATE]을 통해서 접근레벨을 제한할 수 있다.
      • 예 : @Getter(AccessLevel.PACKAGE), @Setter(AccessLevel.PRIVATE)
    • getter/setter 관례에 따라서 get필드명, set필드명 메소드가 생성됨
    • Getter
    • Setter
  • @EqualsAndHashCode
    • 코드에서 객체의 비교 등의 용도로 사용되는 equals(), hashCode() 메소드의 코드를 절감할 수가 있다.
    • @EqualsAndHashCode(exclude={“field1”, “field2”}) 처럼 필요에 따라서 특정 필드를 제외할 수가 있다.
  • @ToString
    • 로그Log에서 객체의 내용을 확인하는 등의 용도로 쓰이는 toString() 메소드를 대신할 수 있다.
    • @ToString(exclude=”field1”) 처럼 필요에 따라서 특정 필드를 제외할 수 있다.
  • @Log
    • 최근에 알게된 기선님의 글() 녀석인데, Logger와 관련된 코드들을 줄일 수 있다.
    • 추가하면 자동으로 필드에 private static final Logger log 가 추가된다. 이후 로그를 찍으려는 곳에서는 log.error(), log.warn(), log.debug(), log.info() 형태로 사용하면 된다.


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

※ lombok이 이클립스에 설치가 안되는 경우

방법1.
1. lombok.jar를 eclipse 폴더에 복사한다.
2. eclipse.ini 맨 아래에 아래 붉은 코드를 넣는다.

-javaagent:C:\dev\eclipses\eclipse-jee-2018-09-win32-x86_64\lombok.jar 



방법. 이클립스 이전 버전
1. lombok.jar를 eclipse 폴더에 복사한다.
2. eclipse.ini 맨 아래에 아래 붉은 코드를 넣는다.

-vmargs
-Dfile.encoding=UTF-8
-Dosgi.requiredJavaVersion=1.6
-Xms2048m
-Xmx2048m
-javaagent:lombok.jar
-Xbootclasspath/a:lombok.jar



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

Gradle 로 build 시

build.gradle

// plugins 선언은 build.gradle 최상단에 해야 한다. (apply 보다도 먼저)
plugins {
    id 'net.ltgt.apt' version '0.19'
}

dependencies {
    // compileOnly 만 있으면 gradle build 시 문제가 없다.
    compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.2'

    apt group: 'org.projectlombok', name: 'lombok', version: '1.18.2'
}






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


Lombok 사용시 컴파일 경고 없애는 방법


Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type.


import lombok.EqualsAndHashCode;



@Data /* 아래 코드 추가 */
@EqualsAndHashCode(callSuper=false)

public class Program extends CommonModel {
    private String id;
}


좀더 자세한 사용법은 아래 링크에 코드를 참조

http://projectlombok.org/features/EqualsAndHashCode.html

간단히 이야기 하면 별도로 구현하는 Value Object 가 없다면 위에 callSuper=false 있다면 위 링크를 보고 참조해서 구현하면 됩니다.


Eclipse에서 javascript validation 끄기


※ 이클립스 Preferences - Validation에서 체크를 해제해도 javascript의 validation을 체크할 때 끄는 방법

1. 프로젝트 우클릭 - Properties > Clientside JavaScript > Include Path
1. 프로젝트 우클릭 - Properties - 왼쪽 메뉴 JavaScript - Include Path 클릭

2. Source 탭 - 프로젝트 확장 - Excluded 선택 - Edit 버튼 클릭

3. Exclusion patterns 에 패턴 등록
    *.js

출처 : http://divestudy.tistory.com/17

Eclipse에서 run configuration을 적용하여 프로그램을 실행할 경우 더럽게 귀찮다.


그래서 단축키를 지정해주고 싶었는데 단축키 따윈 없음.


그러다가 찾은 방법임.


엄청 간단함. 은 아니고 생각보단 간단함.


먼저 Help > install new software 선택 후 주소창에 입력 후 work with 에  아래 주소 입력 후 설치

http://puremvcnotificationviewer.googlecode.com/svn/trunk/PracticallyMacroGoogleUpdateSite



설치 완료 되었으면


1. Window > preference 선택 후 "Practically Macro Options"  섹션을 확장하고 Editor Macro Definitor 선택

(귀찮이면 검색창에 "Editor Macro Definitor" 입력)


2. new 버튼 누르고


3. dlg 생기면 오른쪽 리스트에서 Editor Macro script 누르고 가운데 add-> 버튼 누름 그러면 editor 창이 뜸.


4. 기본으로 써있는 텍스트 지우고

 

//Scripts are beanshell format (see http://www.beanshell.org/)
 
//variable               type
//styledText             the org.eclipse.swt.custom.StyledText instance for the current editor
//console                write output to the macro console via console.write(String), .writeln(String), .write(Exception)
//findTarget             the instance of org.eclipse.jface.text.IFindReplaceTarget
import org.eclipse.swt.custom.StyledText;
import org.eclipse.jface.text.IFindReplaceTarget;
 
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.ui.DebugUITools;
    try
    {
      // Terminate process if it already exists from a previous launch
      org.eclipse.debug.core.ILaunch[] allLaunches=DebugPlugin.getDefault().getLaunchManager().getLaunches();
      for (ILaunch l : allLaunches)
      {             
        if (l.getLaunchConfiguration().getName().equals("configuration 이름 입력"))
        {
          console.write("terminating launch: " );
          console.writeln(l.getLaunchConfiguration().getName());
          l.terminate();
          break;
        }
      }
 
        org.eclipse.debug.core.ILaunchConfiguration[] allConfigurations=DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations();
        for (ILaunchConfiguration config : allConfigurations) {
            if (config.getName().equals("configuration 이름 입력"))
            {
                DebugUITools.launch(config, "debug or run");
                break;
            }
        }
    } catch (CoreException e) {
        e.printStackTrace();
    }
    finally{}


 

"20번과 31번째 줄에서 "configuration 이름 입력" 이부분에 configuration 이름을 입력하면 됨. 

33번째 줄의 "Debug or Run" 에는 상황에 맞게 debug 또는 run을 입력하고 OK 버튼을 누르면 됨


5. 아래 Macro info에 이름을 적어주고 (이름은 나중에 확인해야 하므로 가급적 알아보기 쉬운걸로 하는걸 권장)

id 입력 id는 중복만 안되면 되니깐 아무거나 사용하면됨.


6. 다시 한번 OK 버튼을 눌러서 preference 창을 닫는다. 


7. 다시 Window > preference 선택하여 preference 창을 연다.


8. General 섹션의 keys 를 누른다. type filter text에서 key로 검색해도 됨.


9 가운데 command들 중에서 5번에서 적어준 이름을 찾은 후 선택


10. 왼쪽 아래에 Binding 에 원하는 바로가키 키를 누른다. 


11 ok 버튼을 누른다.


그럼 끝!!!!

+ Recent posts