반응형

이클립스를 계속 쓰다보면 이런식으로



변경사항이 없는데 'Initializing Java Tooling' has encountered a problem 오류가 뜰때가 있다

딱히 해결방법을 몰랐었다가 검색으로 해결한 방법인데 공유하고자 한다


1. 폴더로 이동


workspace 가 있는 폴더로 이동한다 (이클립스 폴더 X)

\workspace\.metadata\.plugins\org.eclipse.core.resources\.projects


해당 경로에서 생성된 파일들을 모두 지워주자 (.project 하위폴더 전부삭제)


그리고 이클립스를 재시작해보면

아까와 다른 경고가 뜰것이다


\Dev\workspace\.metadata\.plugins\org.eclipse.core.resources\.projects\RemoteSystemsTempFiles\.markers.snap 

(지정된 경로를 찾을 수 없습니다)


해당 경우는 해당 위치에 RemoteSystemsTempFiles,Server 폴더만 생성해주면

해결이 된다





참고 : http://hunit.tistory.com/193

        http://codedragon.tistory.com/5005



+ 2018/01/08 추가


해당 방법을 사용하면 에러는 고쳐지지만

기존에 설정했던 SVN과 GIT 설정등이 있을경우 전부 사라져 버리기때문에

해당 방법 사용전 프로젝트들을 백업 시켜두고

연동된 프로젝트가 있었다면 방법 사용후엔 연결이 끊겨있기때문에

 재연결이나 import를 시켜주어야한다





이클립스의 설정은 윈도우 레지스트리에 보관되지 않습니다. 워크스페이스 폴더를 보면 .metadata 폴더가 있습니다. 여기에 이클립스에서 설정했던 내용들이 들어가 있습니다.

.metadata

.metadata


이 얘기는 workspace를 바꾸면 설정을 다시해 줘야 한다는 뜻입니다.
또한 이클립스를 업그레이드해도 이전에 쓰던 작업환경의 설정을 그대로 가져갈 수 있다는 뜻이기도 합니다.

살짝 .metadata 폴더 내용을 보면 다음과 같습니다.

.metadata 폴더

.metadata 폴더


이 중에 각각의 플러그인 설정값은 .plugins 아래 보관이 됩니다.
.log 파일은 이클립스 내부에서 발생하는 오류들의 스택트레이스 로그가 보관됩니다. 플러그인 충돌이나 기타 이클립스가 오작동을 할 경우 이 안에 있는 내용을 토대로 구글링 해보면 운 좋게 해결법을 찾을 수 있습니다.

이클립스가 종료된 상태에서 .metadata 를 지우면 설정은 다시하셔야 됩니다. 이클립스의 검색 인덱스 파일도 여기에 보관이 되기 때문에 혹시나 이클립스 워크스페이스가 무거워졌다고 느껴지면 한 번 지웠다가 다시 설정하는 것도 나쁘지는 않습니다.


출처: http://okjsp.tistory.com/1165643079 [OK 괜찮아, fInD YoUr FuN, eNjOy iT!]



이클립스(Eclipse)를 새 PC에 설치해서 구동하려고 했더니, 다음과 같은 오류 메시지가 떴습니다.

이 오류 메시지가 뜨면 이클립스 실행 자체가 되지 않습니다.

 

회사에서도 그렇고, 이전 PC에서도 그렇고, 별 문제 없이 잘 실행 되었던 것으로 기억하는데..(사실 잘 기억은 안나네요. 처음 설치하고 고생했는지는 너무 오래전 일이라. 보통 한 번 잘 세팅해놓고, 왠만해서는 변경하지 않으니... ㅎㅎㅎ)

 

 

 

Java was started but returned exit code=13 로 시작하는 긴 오류 메시지가 떴습니다. 블라블라~

 

보통 가장 빈번한 경우는 OS 비트와 이클립스의 지원 비트 버전이 다른 경우입니다.

OS는 64비트인데, 이클립스는 32비트용을 다운로드 받아 설치한 경우이지요.

이 때의 문제는 간단히 이클립스를 OS 버전에 맞는 것으로 다시 다운로드 받아 설치하면 됩니다.

 

 

그리고 다른 케이스가 있는데, 이클립스가 실행하면 javaw.exe 파일(JDK 내에 있음)을 찾아 실행시키는데, 해당 파일을 찾지 못한 경우입니다. (제가 겪은 케이스입니다.)

이 때에는 직접 설치한 JDK폴더의 javaw.exe 파일 경로를 eclipse.ini 파일에 지정해주면 됩니다.

 

참고로 javaw.exe 파일은 java.exe 파일과 그 기능이나 동작은 동일하지만, 단지 Console Window 를 띄우지 않는 다는 차이점만 있습니다. (즉, Java.exe 와 동일하게 동작하지만, 어떠한 상태 정보등을 명령 프롬프트(콘솔 창)에 출력하지 않습니다. 단 오류가 발생하는 경우라면 오류 메시지 박스(대화 상자)를 띄워줍니다.)

그리고 java.exe 파일은 자바 프로그램을 구동시키기 위한 자바 런타임 환경(Java Runtime Environment)을 제공 뿐만 아니라 웹 브라우저에서 Java 기반의 플러그인을 실행할 수 있도록 하기 위한 백그라운드 프로세스로 실행되는 프로그램입니다. 그렇기 때문에 Java 프로그래밍에는 필수 요소입니다.

 

Eclipse가 설치된 폴더로 가서 eclipse.ini 파일을 메모장 등의 텍스트 편집 도구로 불러옵니다.

 

 

 

그리고 아래와 같이 -vmargs 윗쪽에 javaw.exe 파일 경로를 입력하여 줍니다. 사용자마다 JDK 설치 폴더가 다를테니, 자신의 시스템에 설치된 경로를 확인하여 입력하시면 됩니다.

 

-vm
C:\Java\jdk1.7.0_45\bin\javaw.exe (javaw.exe 파일이 존재하는 경로)

 

아래 -vmargs 는 -vm (Virtual Machine)으로 구동될 javaw.exe의 인자 정보들을 의미하므로 위의 -vm 코드는 반드시 -vmargs 보다 상단에 작성하여야 합니다.

 

참고로 해당 포스팅은 Eclipse Juno 버전과 Kepler 버전에서 확인되었습니다.



출처: http://ooz.co.kr/140 [이러쿵저러쿵]


반응형
반응형

개인 프로젝트를 하면서 스프링 타일즈를 적용해보았던걸 토대로 작성해봅니다


스프링 타일즈는 

뷰단의 탑,사이드메뉴,하단,메인 등을 페이지 include 방식으로 나누는 

기존구조를 쉽게 적용하기 위한 템플릿 프레임워크입니다

장점은 include 디자인을 변경하면 페이지를 전체적으로 수정해야하는 번거로움을 없애고

일관적인 페이지 관리를 가능하도록합니다


대략적인 순서를 보자면


- pom.xml 에 tiles 관련 dependency 추가

- servlet-context.xml 파일에 타일즈 View Resolver 를 추가

- tiles 관련 설정 xml 추가

- 기본 레이아웃 jsp 추가


입니다.


1. pom.xml dependency 추가


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        <properties>
            <!-- .....   -->
            <!-- .....   -->
            <org.apache.tiles-version>3.0.5</org.apache.tiles-version>
        </properties>
        <!-- Tiles -->
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-servlet</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency>
         <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-api</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-core</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-template</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency
cs


버전은 3.0.5로 맞췄습니다



2.servlet-context.xml 파일에 타일즈 View Resolver 빈 추가


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 <bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
        <property name="order" value="1" /><!-- 순서를 우선으로 지정 -->
    </bean>
     
    <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/tiles/tiles-def.xml</value>
            </list>
        </property>
    </bean>
 
 <!-- order 속성을 사용하는 다른 부분은 2번을 지정해야함 -->

 <property name="order" value="2" />

cs


여기서 중요한 부분은 order 속성을 최우선을 1번으로 지정한 것인데

tiles 를 가장 우선적으로 로드시킨다는 설정이므로

order 속성을 사용하는 다른곳은 설정값을 다르게 줘야합니다

다음 설정에 이유를 설명합니다



3. /WEB-INF/tiles/tiles-def.xml  설정


해당 설정부분은 타일즈 layout을 적용 하는 화면과

적용하지않는 화면(ex :로그인) 을 구분지어 볼것입니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
 
<tiles-definitions>
 
    <!-- (1) 레이아웃을 적용하지않는화면-->    
    <definition name=".login" template="/WEB-INF/jsp/tileLayout/loginLayout.jsp">
        <put-attribute name="title" value="" />
        <put-attribute name="header" value="/WEB-INF/jsp/tilesView/header.jsp" />
        <put-attribute name="menu" value="" />        
        <put-attribute name="footer" value="" />
    </definition>
 
    <!-- (2) 레이아웃을 적용하는화면-->
    <definition name=".root" template="/WEB-INF/jsp/tileLayout/baseLayout.jsp">
        <put-attribute name="title" value="" />
        <put-attribute name="header" value="/WEB-INF/jsp/tilesView/header.jsp" />
        <put-attribute name="menu" value="/WEB-INF/jsp/tilesView/menu.jsp" />        
        <put-attribute name="footer" value="/WEB-INF/jsp/tilesView/footer.jsp" />
    </definition>
    
    <!-- (1) -->    
    <definition name="/login/*" extends=".login">
      <put-attribute name="body" value="/WEB-INF/jsp/login/{1}.jsp" />
    </definition>
 
    <!-- (2) -->
   <definition name="/*/*" extends=".root">      
      <put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}.jsp" />
    </definition>
</tiles-definitions>
cs


(1) header 에는 디자인이없는 공통 라이브러리들이 참조 될것이고 로그인 페이지는 header만 참조되었습니다

    경로는 구성에 맞게 설정하면 된다, definition 의 template 속성이 기본적으로 틀이 잡힐 레이아웃 jsp이고

    그곳에 put-attribute를 넣는 방식으로 설정됩니다

    두번째 extends 쪽 definition 을 살펴보면  name 에 매핑을 걸고 해당매핑일때 참조될 jsp의 주소를 가리킵니다

    중요한건 /login/login 라는 매핑이 들어왔을경우 put-attribute의 경로에는 *(에스테리크) 를 {1} 에 넣어줄수있게됩니다

    그러므로 /WEB-INF/jsp/login/login.jsp 를 찾아들어가게됩니다


(2) 사용하지않을 title 같은 디자인은 value를 "" 로 넣어주면 됩니다

    아예 코드줄에서 빼버려도 상관 없을것같긴한데 시도해 보지는 않았습니다

    2번의 매핑은 약간 복잡한데 말그대로 로그인을 제외한 모든루트에 매핑할때 가능한 구조입니다

    예를 들어 /community/community 매핑이 들어올경우 /WEB-INF/jsp/community/community.jsp

    로 치환시킵니다 물론 body의 매핑과 파일명을 맞춰주어야하죠


위의 코드가 완전히 정확한건아니지만 나름대로 이것저것 테스트해보면서 적용해보았던 코드입니다 

여기서 약간 의문이 들어야하는데

보통 톰캣 구동시에 web.xml 의 welcom-file 경로 => 컨트롤러의 @RequestMapping경로를 타는데

타일즈에서 매핑을 쓸수있는 이유는

<property name="order" value="1" />

2번에서 설정한 해당 우선순위 때문입니다

보통은 컨트롤러에서 ViewResolver를 이용해 jsp view를 결정해버리는데 그 우선권을 가로챈 형태인것입니다

작동방식을 이해못하고 처음에 코드만 붙이다가 에러만 뿜어서 고생좀 했습니다

순서를 정리해보자면 이렇습니다.


url 호출 => @ReqeustMapping => Tils ViewResolver => UrlBasedViewResolver




4. 3번의 경로에 JSP 생성


     

    해당 루트로 생성해주시면됩니다


baseLayout.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
<html>
<head>
<title>Explosion</title>
<%@ include file="/WEB-INF/include/include-header.jspf" %>
</head>
<body class="wrapper">
    <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0">        
        <tiles:insertAttribute name="header"/>        
        <tiles:insertAttribute name="menu" />    
    </nav>
     <div id="page-wrapper">
             <div class="row">
                <div class="col-lg-12">    
                    <h1 class="page-header">${setHeader}</h1>
                </div>
            </div>
            <div class="row">                 
                <tiles:insertAttribute name="body" />                                                  
            </div>
          
     </div>
    
 
    <div class="main_footer">
        <div class="main_footer-inner">
            <tiles:insertAttribute name="footer" />
        </div>
    </div>
</body>
</html>
cs


타일즈 태그를 삽입한 모습입니다 jstl과 비슷한 형태입니다


loginLayout.jsp


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
<html>
<head>
<title>Example Explosion</title>
<%@ include file="/WEB-INF/include/include-header.jspf" %>
</head>
<body>
                
   <tiles:insertAttribute name="body" />                                                  
    
</body>
</html>
cs


로그인은 메뉴가 필요없으므로 body만 넣은 모습입니다

include-header.jspf 는 공통 라이브러리들이고 레이아웃jsp들에만 include 해놓으면 

다른데에 추가할필요없이 모든화면에 적용됩니다 이점은 매우 편리한것같습니다.


6 컨트롤러


컨트롤러에는 크게 설정할 부분은 없습니다 view를 해당 파일위치에 맞게만 설정해주면 됩니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package first.main.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import first.common.dto.CommandMap;
import first.common.util.ScreenResolver;
 
@Controller
@RequestMapping(value="/main")
public class MainController {
        
    @RequestMapping(value= {"/main","/main.do"})
    public ModelAndView openTilesView(CommandMap commandMap, ModelAndView mv) throws Exception{
        mv.setViewName("/main/main");//타일즈 view => 일반 view
        mv.addObject("setHeader", ScreenResolver.resolve(this));
        return mv;
    }
    
}
cs


여기서 setViewName만 설정해놓으면

title header footer menu 4개는 항상 따라다니며 body의 링크를 타게됩니다

테스트를 해보시길 바라며

이상 포스팅마치겠습니다.

반응형
반응형
1···46474849

+ Recent posts