이 글을 보시는 분들의 특징은 아마도

 

spring + mybatis 환경에서

 

xml파일이 src/main/java 내부에 *.mapper.xml로 java소스랑 섞여있으실꺼다

 

왜냐면 우리 회사가 그러거든 ^^

 

 

일단 권장하는 설정은 java파일 이외에 xml 등등의 resource파일은 src/main/resources 내부에 두는것이다.

 

하지만 나처럼 프로젝트를 크게 건들기 싫은사람은 아래의 방법을 사용한다

 

 

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>                      
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

 

build 태그 내부에 다음부분을 명시해주면

 

mvn package 이후에

 

src/main/java/../SomeMapper.xml 이 같이 말려있는것을 확인할 수 있다!

 

 

 

 

https://stackoverflow.com/questions/9798955/with-maven-clean-package-xml-source-files-are-not-included-in-classpath

 

 

 

 

와 .. 난 이걸 1년동안 가만히 뒀는데

 

도저히 내가 잡을 수 없는 그런 이클립스의 종특이라고 생각했다 ...

 

사람마다 다를 듯 하지만 내가 쓰는 eclipse에 내장된 maven은 기본 default compiler의 jdk 설정이 1.5였다

 

만약 본인이 따로 maven compiler plugin을 설정해서 사용한다면

 

 

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>

위와같이 configruation 태그 안에 source, tartget을 본인이 사용할 jdk 설정으로 바꿔주면된다.

 

만약 본인이 maven compiler plugin 을 사용하지 않고 default를 사용하는데

 

컴파일 jdk를 변경하고싶다면

 

<properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>

 

다음과 같이 변경함다

 

 

* 내 생각에 이 글은 버전에따라 먹힐수도 안먹힐 수도 있을꺼 같긴하다... 물론 내생각!

 

 

 

https://stackoverflow.com/questions/28509928/java-version-automatically-change-to-java-1-5-after-maven-update

 

 

 

 

 

 

보통 이 에러는 mockito + powermock 조합일때 나는것 같다.

 

powermock이 리플렉션으로 이루어져있어서 private , protected 메서드 의존성을 깨부술라고 너무 기쁜 맘에 도입했다

 

결과는 역시 fail ...

 

하지만 우리에겐 구글신이 있지

 

 

만약 Mockito 2.x 버전을 쓰고 있으면 powermock-api-mockito 모듈은

 

java.lang.NoClassDefFoundError: org/mockito/cglib/... 의 에러를 뿜뿜할 것이다

 

Mockito 2.x 에는 powermock-api-mockito2 모듈을 얻혀주면 잘 동작할 것이다

 

 

 

만약 위 방법으로 해결되지 않았다고 하더라도

 

Mockito 와 PowerMock의 의존성이 어느정도 있는 듯 하니 반드시 버전체크를 진행한다

 

 

 

여담으로 라이브러리 버전 맞춰주니까

 

이번엔 jdk 문제가 나서 (회사 jdk 1.6 =_=)

 

 그냥 Mockito 1.10.x powermock 1.6.x 로 올려주니까 잘 돌아간다 ..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-top-ten-118c52abd1d8

 

 

 

회사에 테스트 프레임웍을 포함해 테스트코드는 하나도 없어서 내가 구축해서 해보려고 하는데

 

난관이 많았다 ... 위 에러는 비교적 간단하지만 그래도 글을 남겨본다

 

 

 

우리가 대표적으로 사용하는 tomcat은 서블릿컨테이너를 포함하고있는데

 

웹 어플리케이션을 이클립스에서만 빌드해본게아니라 maven 명령어로 빌드해보신분들은 잘 아실꺼다

 

빌드하는 순간 javax.servlet ... 어쩌구 에러가 나는데 이게 단순히 mvn package 명령어로 빌드하는 시점에는

 

서블릿 컨테이너가 없기 때문에 컴파일시점에서는 오류가 난다.

 

 

그래서

 

 

		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>javax.servlet-api</artifactId>
		    <version>3.0.1</version>
		    <scope>provided</scope>
		</dependency>

 

위와같이 scope 설정을 provide로 둔다. provided 설정은 javax.servlet 에 대한 의존관계를 컨테이너에게 떠넘긴다? 라고 생각하면 편하다. 따라서 빌드하는 시점에는 오류가 나지 않는다.

 

 

 

뭐 이거는 그렇다 치고 .. 똑같이 웹어플리케이션을 테스트할때도 마찬가지다.

 

junit이 돌아갈때는 javax.servlet 패키지에 대한 의존관계를 아무도 해결해주지 않기때문에 스프링 컨테이너가 올라가는 시점에 에러가 난다.

 

 

No qualifying bean of type [javax.servlet.ServletContext] found for dependency ... 어쩌구

 

이때 사용 할 수 있는것이 바로

 

@WebAppConfiguration 어노테이션이다.

 

spring doc을 확인해보면

 


The presence of @WebAppConfiguration on a test class indicates that a WebApplicationContext should be loaded for the test using a default for the path to the root of the web application. 

 

테스트 클래스에 @WebAppConfiguration이 있으면 웹 응용 프로그램의 루트에 대한 경로에 대한 기본값을 사용하여 테스트를 위해 WebApplicationContext를로드해야 함을 나타냅니다. 


 

라는 말이 있다. 여기서 경로에 대한 기본값은 따로 지정하지 않으면 "src/main/webapp" 로 올라간다.

 

 

 

 

 

 

 

알고리즘을 주제로 1일1커밋한지 100일이 조금 넘었다 ...

 

풀심는거보면 보람차고 뭔가 꾸준히 하는거같아서 기분이 좋은데 알고리즘은 잘 안는다 ..

 

뭐 이건 여담이고

 

나같은 경우는 갑자기 push가 안됐다

 

git 허접인 나는 난관에 봉착하는데

 

failed to push some refs to ... 검색어로 아무리 검색해도

 

remote저장소에 있는 소스를 최신버전으로 pull 을 받지 않아서 pull 이후 push하라는 내용 뿐이였다..

 

만약 당신이 fatal error in commit_refs 라는 키워드로 검색해서 한방에 찾았다면 당신은 행운아 또는 똑쟁이다

 

나는 머저리 

 

해결은

 

git gc 

 

명령어를 실행시켜보자

 

gc 명령어는 유명 블로그에서 참조했다

 

git gc
저장소의 로그를 최적화 합니다. 로그가 변경되지는 않고 저장하는 방식만 최적화 합니다. --aggressive 옵션을 주면 더 자세하게 최적화합니다.

 

 

 

https://stackoverflow.com/questions/37341960/how-do-i-fix-remote-fatal-error-in-commit-refs-errors-trying-to-push-with-git

https://blog.outsider.ne.kr/572

 

 

 

tomcat시작과 함께 뱉는 에러 ..

eclipse does not exist or is not a readable directory

 

사실 이 글은 maven 기반 프로젝트가 아니면 무용지물일지 모른다.

 

 

나같은경우는

 

이클립스의 New Server, Add And Remove 등등에서 해당 프로젝트가 보이지 않은 경우이다.

 

project clean을 해줘도 .. 이클립스를 다시 켜줘도 문제가 해결되지 않는데

 

생각보다 방법은 간단하다

 

해당 프로젝트 우클릭 -> Maven -> Update Project 로 프로젝트를 다시 리로딩해주면 된다.

 

cli로 해결하고싶다면 해당 디렉토리에서 아래 명령어를 입력해보자

 

mvn eclipse:eclipse
mvn eclipse:clean

 

 

 

 

https://stackoverflow.com/questions/21239573/maven-dependency-update-on-commandline

 

나같은 경우는 jenkins 설치 후 jenkins로 유저 변경하려는데

 

su - jenkins

 

이 명령어를 입력해도 아무런 반응이 없었다

 

google신에게서 답을 찾았는데

vi /etc/passwd

위 파일을 확인해서 jenkins가 /bin/false로 되어 있다면 로그인이 불가능한 계정이다

 

/bin/false의 뜻은 아래와 같다

...더보기

/bin/false 

allows a login, but no shell, no ssh tunnels and no home directory.

-> 시스템의 로그인은 불가능, FTP 서버 프로그램같은 프로그램도 불가능하다.

쉘이나 ssh과 같은 터널링(원격접속) 그리고 홈디렉토리를 사용할 수 없다.

 

 

 

이게 어떤식으로 동작이 되는지 아직 리눅스에 대해서 잘 모르지만 우회하는 방법이 있는듯하다.

su - username -s /bin/sh

위 명령어를 실행 후 whoami를 실행하면 우리가 원하던 계정으로 로그인 한 것을 확인할 수 있다.

 

 

 

 

 

출처 : http://faq.hostway.co.kr/Linux_ETC/1624

출처 : https://unix.stackexchange.com/questions/39314/su-does-not-change-user-but-does-not-respond-with-an-error-either

 

나같은사람이 모를 수 있다.

 

mvn 명령어를 사용할 경우 JAVA_HOME을 따로 지정해줘야 하는 경우가 생길 수 있다 

 

나같은경우는 연습하는 리눅스 서버를 재가동했더니 아래 에러가 나왔다

 

The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

 

java의 심볼릭링크가 jre경로로 되어있어서 바꿔줘도 결과가 똑같았다

 

 

아래는 해결

 

 

 

vi /etc/mavenrc 파일을 새로 생성하여

 

JAVA_HOME=여러분들의 jdk가 들어있는 home 디렉토리

 

를 입력하고 저장 후

 

다시 mvn 명령어를 사용하면 된다.

 

주의할점은 /bin 디렉토리는 포함하면 안되는 것 같다 딱 /bin 경로가 있는 root경로까지만 추가후 

 

mvn 명령어를 실행 해보자

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 : https://magicps.tistory.com/1768

+ Recent posts