2015-09-24 67 views
6

Sprint Tool Suite(eclipse)の使用を開始し、「プロローグでコンテンツが許可されていません」という私のmavenプロジェクトのjavaファイルでこのエラーが発生しました。これにより、クラスがコンパイルされるのを防ぐことができます(これは、最小のSpringBootApplicationクラスです)。Javaファイル:プロローグで許可されていないコンテンツ

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」でコンパイルエラーなしでビルドされています。私はJavaファイルにも特殊文字は見当たらないが、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 's/[^\x20-\x7f\x0A\x09]//g' fileNameを使用してすべての目に見えない文字を削除した 、目に見えない文字はありませんでした。これは、16進エディタで見たものを確認します。

2つの質問があります。なぜ、エラーが.javaファイルではなく.javaファイルに表示されるのですか? 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) 

更新使用して<?xml前に、私は文字で私のワークスペースでいくつかの日食で生成されたXMLファイルを見つけた3

日食ログは、(.xmlファイルを示します)、このメッセージを表示しますgrep -ERl '^[^=]+<\?xml' . xmlがファイルの行に埋め込まれているeclipseユーザーのprefsを無視します。余分な文字を削除した後、問題は残った。

私はプロジェクトを再起動し、ファイルを一度に1つずつコピーすることができます。

+1

かなり遠いですが、WindowsからUnixへの改行に関連しているかもしれませんか?これは、誰かがWindows上でファイルを保存し、それをunix上で開いた場合に起こります。 dos2unixを実行して修正することができます。 –

+0

[Eclipseコンテンツはプロローグで許可されていません](http://stackoverflow.com/questions/5445143/eclipse-content-is-not-allowed-in-prolog)をチェックしましたか? –

+0

@Elliott Frisch私はpom.xmlを投稿しました – rimsky

答えて

7

おそらく原因は、壊れたEclipseワークスペースでした。私は新しいワークスペースを作成し、プロジェクトをインポートし、すべて正常に動作します。それはまた外部のMavenビルドが何の問題も示さなかった理由を説明するでしょう。

更新3で指摘したように、プロローグの前に文字を含むeclipseで生成されたxmlファイルがいくつか見つかりました。これらの問題を修正しても問題は解決しませんでしたが、prologの前に目に見えない文字がいくつか含まれているかどうかを確認するために、xmlコンテンツ(ユーザーの環境設定など)

応答のないメイキングレポの更新中に強制的にEclipseを終了することを除いて、何が壊れていたのか分かりませんが、問題が起きたときはわかりません。私は前進することができてうれしいです。

+0

Eclipseの... server.coreのコンテンツ全体を削除しました。 – user435421

3

は、ほとんどの場合、エラーがXMLファイルの先頭にUTF-8BOMによって生成された - Notepadなどのアプリケーションは、ファイルの開始とJavaのストリームに自動的にそれを扱うことができないことになります。 XMLは正しいですが、ファイルはUTF-8エンコードされていません。私はこの前にこれを見てきました。このフォーラムからXMLをコピーしてテキストエディタに貼り付けて保存してみてください。また、テキストエディタが実際にUTF-8に保存されていることを確認してください。

また、Springので先に行くとDTD宣言と開始element間のコメントを削除する任意の<?xml ... >宣言せずにうまく動作します。 UTF-8宣言を削除します。UTF-8でコード化されたXMLの問題は、かなり一般的であり、Springに固有ではありません。

+0

提案していただきありがとうございますが、動作しませんでした。 – rimsky

1

私の場合、メインクラス(@SpringBootApplicationでアノテートされたクラス)の名前がspringbootアプリケーションのに変更されている間にこのエラーが発生しました。私はこれがいつも起こるということを意味するわけではありませんが、STS 3.8.4でこのクラスファイルの名前を変更した後にこのエラーが発生しました。

この問題を解決するために、IDEを終了し、プロジェクトフォルダに移動して.springBeansファイルを削除しました。再オープンされたIDEの後、このエラーはなくなり、私のIDEはもうこのことについて不平を言っていません。

+1

+1これは私を助けたものです。 Spring Beanファイルを削除し、プロジェクトをクリーンアップし、クローズして再オープンします。 – Calebj