1. Maven 프로젝트 구성 후 아래 처럼 오류가 발생하는 경우

 

Description	Resource	Path	Location	Type
cvc-elt.1.a: Cannot find the declaration of element 'project'.	pom.xml	/mvn	line 1	Language Servers

Description	Resource	Path	Location	Type
Downloading external resources is disabled.	pom.xml	/mvn	line 3	Language Servers


# 방법1

오류 부분을 마우스 over하면 나오는 tooltip에서 "Force download of 'https://maven.apache.org/xsd/maven-4.0.0.xsd'" 링크를 클릭하면 자동 다운로드 됨




# 방법2
https => http 로 변경

# 기존
<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">

# 변경
<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">






참고 : https://www.lesstif.com/pages/viewpage.action?pageId=30277941

Chocolatey  는 Mac OS X 의 Homebrew 나 Linux 의 yum, apt-get 같은 역할을 수행하는 NuGet 기반의 윈도우용 패키지 관리자이다.

 

설치

cmd.exe 를 열고 다음 명령어 실행

@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

또는 powershell 을 실행한 후에 파워쉘 프롬프트에서 설치 명령어 입력

iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))

 

다른 경로에 설치할 경우 ChocolateyInstall 환경 변수에 설치할 폴더를 지정하고 수동으로 폴더 생성

set ChocolateyInstall=d:\devel\choco

 

패키지 검색/목록 보기

https://chocolatey.org/packages 에서 패키지 검색하거나 cmd 에서 다음 명령어 입력

choco search nodejs

 

list

전체 패키지 목록

choco list

 

로컬에 설치된 패키지

choco list --local-only

 

info

패키지에 대한 자세한 정보를 보려면 search 에 아래 옵션 추가

choco search <pkgname> --exact --detailed

또는 위 명령의 축약어인 info 명령어 사용

choco info nodejs

 

설치

choco install nodejs

삭제

choco uninstall nodejs

 

Ref


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에서 maven project를 생성하면 아래처럼 버전이 낮은 프로젝트가 생성된다.
    - JRE 버전 : 1.5
    - Dynamic Web Module (web.xml) 버전 : 2.3

프로젝트 Properties > Project Facets 에서 Dynamic Web Module를 3.0으로 변경하면
"Cannot change version of project facet Danymic Web Module to 3.0" 이란 메시지가 나오면서 변경이 안된다.

1. web.xml 변경 (Dynamic Web Module 2.3 -> 3.0)

Servlet 4.0
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
    <display-name>Archetype Created Web Application</display-name>
</web-app>

Servlet 3.1
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
    <display-name>Archetype Created Web Application</display-name>
</web-app>

Servlet 3.0
<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <display-name>Servlet 3.0 Web Application</display-name>
</web-app>

Servlet 2.5
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    <display-name>Archetype Created Web Application</display-name>
</web-app>

Servlet 2.4
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="servlet-2_4" version="2.4">
    <display-name>Servlet 2.4 Web Application</display-name>
</web-app>

Servlet 2.3
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <display-name>Servlet 2.3 Web Application</display-name>
</web-app>

Servlet 2.2
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
    <display-name>Servlet 2.2 Web Application</display-name>
</web-app>


2. pom.xml에 build 추가

<properties>
    <jdk.version>1.7</jdk.version>
</properties>

<build>
        <finalName>${project.name}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                      <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
</build> 


3. 프로젝트 우클릭 > Maven > Update Project 클릭

4. 프로젝트 Facet 변경
    - 프로젝트 Properties > Project Facets 에서 Dynamic Web Module을 3.0으로, Java 1.7 변경
    위 방법으로 할 때
    "Cannot change version of project facet Danymic Web Module to 3.0"이란 메시지가 나오는 경우
    ==> Navigator에서 프로젝트/.settings/org.eclipse.wst.common.project.facet.core.xml 파일 직접 수정

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="java" version="1.7"/>
  <installed facet="jst.web" version="3.0"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project> 


5. Maven Dependencies를 Deployment에 추가
프로젝트 Properties > Deployment Assembly 에서 Add 클릭 - Java Build Path Entries 선택 - Maven Dependencies 선택

6. 프로젝트 우클릭 > Maven > Update Project 클릭


※ 참고 (Tomcat / Servlet / Java Specifications)
http://tomcat.apache.org/whichversion.html

Servlet Spec 

 JSP Spec

 EL Spec

 WebSocket Spec

 Apache Tomcat version

 Actual release revision

 Support JavaEE Versions

 Support JavaSE Versions

 Memo

 4.0

 TBD (2.4?)

 TBD (3.1?)

 TBD (1.2?)

 9.0.x

 None

  8 and later

 


 3.1

 2.3

 3.0

 1.1

 8.0.x

 8.0.18

  7 and later

 

Non-blocking I/O, HTTP protocol upgrade mechanism


 3.0

 2.2

 2.2

 1.1

 7.0.x

 7.0.57

 6 and later
(WebSocket 1.1 requires 7 or later)

 JavaSE 6

JSR 315, Ajax 대응 비동기 지원, 어노테이션에 의한 개발편의성, web.xml 없는 개발 및 배포

 2.5

 2.1

 2.1

 N/A

 6.0.x

 6.0.43

 5 and later

 J2SE 5.0

  JSR 154, Requires J2SE 5.0, supports annotations

 2.4

 2.0

 N/A

 N/A

 5.5.x (archived)

 5.5.36 (archived)

  1.4 and later

 J2SE 1.3

 JSR 154, web.xml uses XML Schema

 2.3

 1.2

 N/A

 N/A

 4.1.x (archived)

 4.1.40 (archived)

 1.3 and later

 J2SE 1.2

 Addition of Filters

 2.2

 1.1

 N/A

 N/A

 3.3.x (archived)

 3.3.2 (archived)

 1.1 and later

 J2SE 1.2

 Becomes part of J2EE, introduced independent web applications in .war files





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

+ Recent posts