[SPRING] Java 파일 : 내용이 프롤로그에서 허용되지 않습니다.
SPRINGJava 파일 : 내용이 프롤로그에서 허용되지 않습니다.
나는 Spring을 처음 사용하고 Sprint Tool Suite (Eclipse)를 사용하기 시작했으며 내 maven 프로젝트의 java 파일에서이 오류를 보았다. "내용이 프롤로그에서 허용되지 않습니다." 이것은 eclipse에서 클래스가 컴파일되는 것을 막습니다 (이것은 최소한 SpringBootApplication 클래스 임).
package com.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
나는 웹을 샅샅이 뒤졌으며 사실상 모든 참조에서 XML 파싱 오류라고 보았다. 나는 3 개의 XML 파일을 업데이트했지만 16 진수 편집기에서 xml 앞에 보이지 않는 문자는 보지 못했습니다. 그들은 모두 UTF-8 인코딩을 사용하도록 지정하고 실수로 UTF-16 인코딩을 나타내는 0 바이트가 교대로 표시되지 않습니다. 줄 끝은 일관된 것처럼 보입니다 (단지 줄 바꿈).
흥미롭게도 "maven clean install"으로 컴파일러 오류없이 빌드됩니다. 자바 파일에도 특별한 문자가 보이지 않지만 eclipse는 그 파일이 문제라는 것을 알려주고 스프링 콩 문제입니다. 오류 메시지는 package 명령문의 첫 행에 표시됩니다.
근본 문제가 무엇인지 또는 어떻게 해결할 수 있습니까?
최신 정보 요청에 따라 여기 내 pom.xml 파일이 있습니다.
<?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>org.springframework</groupId>
<artifactId>gs-rest-service</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<targetPath>com/test/mybatis/mappers</targetPath>
<directory>src/main/java/com/test/mybatis/mappers</directory>
<includes>
<include>*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
업데이트 2 내 프로젝트 폴더에서 모든 .xml 파일을 검색하여 perl -i -pe의 / [^ \ x20- \ x7f \ x0A \ x09] // g 'fileName을 사용하여 프로그래밍 할 수없는 모든 문자를 제거했지만 보이지 않는 문자는 없었습니다. . 이것은 내가 16 진수 편집기에서 본 것을 확인합니다.
두 가지 질문이 떠오른다. a.가 아닌 .java 파일에 오류가 나타나는 이유는 무엇입니까? XML 파일? 왜 이것은 Eclipse에만 문제가되고 Maven에는 문제가되지 않습니까?
Eclipse 로그는이 메시지 (.xml 파일을 나타냄)를 표시합니다.
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.springframework.ide.eclipse.core.io.xml.XercesDocumentLoader.loadDocument(XercesDocumentLoader.java:48)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:429)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$2.loadBeanDefinitions(BeansConfig.java:397)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$3.call(BeansConfig.java:456)
at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$3.call(BeansConfig.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
업데이트 3 xml grep -ERl '^ [^ =] + <\ xml'을 사용하여 xml> 문자 앞에 내 작업 공간에 일부 일식 생성 XML 파일을 찾았습니다. 이는 파일의 라인에 xml이 임베드 된 eclipse 사용자 환경 설정을 무시합니다. 여분의 문자를 제거한 후에도 문제는 남아있었습니다.
프로젝트를 다시 시작하고 한 번에 하나씩 파일을 복사 할 수 있다고 생각하십시오.
해결법
-
==============================
1.범인이 손상된 일식 작업 공간이었던 것 같습니다. 새로운 작업 공간을 만들고 프로젝트를 가져 오면 모든 것이 잘 작동합니다. 이는 외부 메이븐 빌드가 아무런 문제도 보이지 않는 이유를 설명합니다.
범인이 손상된 일식 작업 공간이었던 것 같습니다. 새로운 작업 공간을 만들고 프로젝트를 가져 오면 모든 것이 잘 작동합니다. 이는 외부 메이븐 빌드가 아무런 문제도 보이지 않는 이유를 설명합니다.
업데이트 3에서 언급했듯이 프롤로그 앞에 문자가있는 일식 생성 XML 파일을 발견했습니다. 그것들을 수정해도 문제가 해결되지는 않지만 xml 내용 (예 : 사용자 환경 설정)을 사용하여 모든 이클립스 파일을 검사하여 프롤로그 앞에 보이지 않는 문자가 있는지 확인하지 않았습니다.
무의식적 인 Maven repo 업데이트 중 일식 종료를 제외하고는 무엇이 손상되었는지 알 수 없지만 문제가 시작될 때 확신 할 수는 없습니다. 나는 앞으로 나아갈 수있어 기쁘다.
-
==============================
2.오류는 XML 파일의 시작 부분에서 UTF-8 BOM에 의해 생성되었을 가능성이 큽니다. 메모장과 같은 응용 프로그램은 파일 시작시 Java 스트림이 자동으로 처리하지 못하도록합니다. XML은 올바르지 만 파일은 UTF-8 인코딩되지 않았습니다. 나는 이것을 전에 보았습니다.이 포럼에서 XML을 복사하여 텍스트 편집기에 붙여 넣어 저장하십시오. 또한 텍스트 편집기가 UTF-8로 실제로 저장되는지 확인하십시오.
오류는 XML 파일의 시작 부분에서 UTF-8 BOM에 의해 생성되었을 가능성이 큽니다. 메모장과 같은 응용 프로그램은 파일 시작시 Java 스트림이 자동으로 처리하지 못하도록합니다. XML은 올바르지 만 파일은 UTF-8 인코딩되지 않았습니다. 나는 이것을 전에 보았습니다.이 포럼에서 XML을 복사하여 텍스트 편집기에 붙여 넣어 저장하십시오. 또한 텍스트 편집기가 UTF-8로 실제로 저장되는지 확인하십시오.
또한 Springwill은 xml ...> 선언없이 잘 작동하므로 DTDdeclaration과 시작 요소 사이의 주석을 제거하십시오. UTF-8 선언을 제거하십시오. UTF-8로 인코딩 된 XML과 관련된 문제 Java는 매우 일반적이며 Spring과 관련이 없습니다.
-
==============================
3.Springboot 응용 프로그램의 주 클래스 (@SpringBootApplication으로 주석 된 클래스)로 이름을 바꾸는 동안이 오류가 발생했습니다. 나는 이것이 항상 일어날 것을 의미하지는 않지만 STS 3.8.4에서이 클래스 파일의 이름을 변경 한 후에 실수로이 오류가 발생했습니다.
Springboot 응용 프로그램의 주 클래스 (@SpringBootApplication으로 주석 된 클래스)로 이름을 바꾸는 동안이 오류가 발생했습니다. 나는 이것이 항상 일어날 것을 의미하지는 않지만 STS 3.8.4에서이 클래스 파일의 이름을 변경 한 후에 실수로이 오류가 발생했습니다.
이 문제를 해결하기 위해 IDE를 닫고 프로젝트 폴더로 이동하여 .springBeans 파일을 삭제했습니다. IDE를 다시 열면이 오류가 사라지고 IDE가 더 이상이 문제에 대해 불평하지 않습니다.
-
==============================
4.왜냐하면 내가 몇몇 클래스의 이름을 바꾸었고 .springBeans 파일에 수동 편집이 필요했기 때문이다.
왜냐하면 내가 몇몇 클래스의 이름을 바꾸었고 .springBeans 파일에 수동 편집이 필요했기 때문이다.
from https://stackoverflow.com/questions/32772352/java-file-content-not-allowed-in-prolog by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring @Autowired는 Jpa 저장소를 연결할 수 없습니다. (0) | 2019.05.07 |
---|---|
[SPRING] 봄 MVC - 예기치 않은 쿼리 문자열 매개 변수가 전달 된 확인하는 방법? (0) | 2019.05.07 |
[SPRING] 이름이 'entityManagerFactory'인 bean을 생성하는 중 오류가 발생했습니다. init 메소드를 호출하지 못했습니다. (0) | 2019.05.07 |
[SPRING] Projection을 사용한 Spring JPA 네이티브 쿼리는 "ConverterNotFoundException" (0) | 2019.05.07 |
[SPRING] Google App Engine에서 환경 변수 / 앱 비밀번호를 설정하는 방법 (0) | 2019.05.07 |