2017-09-04 5 views
0

저는 Eclipse에서 지난 6 개월 동안 Google App Engine에서 작업 해 왔지만, Android Studio를 많이 사용하기 때문에 IntelliJ를 사용하려고합니다.IntelliJ로 Maven에서 ClassNotFoundException이 발생했습니다.

그래서 학습용으로 테스트 응용 프로그램을 만들었으므로이 오류가 발생했습니다. (https://pastebin.com/YgB0j6TW)

내가 시작한 방법은 App Engine 프로젝트를 만든 다음, "프레임 워크 지원 추가 ..."로 추가하는 것입니다. Maven을 추가하기 전에 오류를 추가하지 않습니다.

오류로 보이는 종속성은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>TestApp</groupId> 
    <artifactId>TestApp</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> <!-- App Engine Standard currently requires Java 7 --> 
     <maven.compiler.target>1.7</maven.compiler.target> 
     <maven.compiler.source>1.7</maven.compiler.source> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.24.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.core</groupId> 
      <artifactId>jersey-server</artifactId> 
      <version>2.24.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-json-jackson</artifactId> 
      <version>2.24.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-multipart</artifactId> 
      <version>2.24.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-jaxb</artifactId> 
      <version>2.24.1</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>2.8.4</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.8.4</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>2.8.4</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.appengine.tools</groupId> 
      <artifactId>appengine-gcs-client</artifactId> 
      <version>0.6</version> 
     </dependency> 
    </dependencies> 

</project> 

이클립스에서와 마찬가지로 jersey 서블릿을 선언했습니다.

<?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>TestApp</display-name> 

    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

    <error-page> 
     <error-code>404</error-code> 
     <location>/error.html</location> 
    </error-page> 

    <error-page> 
     <error-code>500</error-code> 
     <location>/error.html</location> 
    </error-page> 

    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Restricted Area</web-resource-name> 
      <url-pattern>/secret/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>admin</role-name> 
     </auth-constraint> 
    </security-constraint> 

    <servlet> 
     <servlet-name>jerseyServlet</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>resources</param-value> 
     </init-param> 
     <init-param> 
      <param-name>jersey.config.server.provider.scanning.recursive</param-name> 
      <param-value>false</param-value> 
     </init-param> 
     <init-param> 
      <param-name>jersey.config.server.tracing.type</param-name> 
      <param-value>ALL</param-value> <!-- This is a debug utility that should be disabled when code goes to production --> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>jerseyServlet</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

나는 모든 가져 오기의 범위를 확인했으며 "컴파일"로 설정되어 있습니다. 나는 일식에서했던 것처럼 저지 서블릿을 선언했습니다.

나는 이것이 내가 여기에 해결책을 chencking하여 잘못된 것을 발견하지 못한 클래스 경로 선언과 관련이 있다고 생각한다.

답변

0

그래서 이것을 해결하는 방법을 알아 냈습니다. 이클립스를 사용할 때 "war"폴더를 선택하라는 요청을하므로 로컬에서 실행할 때 lib 폴더를 업데이트합니다.

IntelliJ에서는 발생하지 않습니다. 그래서 maven import libs를 찾지 못했습니다. > [이슈] - -> [출력 레이아웃] -> [WEB-INF] 존재하는 경우

에있는 lib 폴더에 마우스 오른쪽 버튼으로 클릭 (그렇지 않으면 만들

나는 [프로젝트 구조]로 이동하여 그것을 해결)를 선택하고 "Add copy of ..."-> "Library Files"를 선택하십시오.

필요한 라이브러리를 선택하고 적용을 클릭하십시오.

관련 문제