33

このプロジェクトでは、XJC を使用して XSD から Java クラスを生成します。JAVA EE 6 を使用しています。

すべての XSD が再生成されると、生成されたクラスのファイルの先頭に次のコメントが含まれます。

// Generated on: 2011.02.23 at 02:17:06 PM GMT 

このコメントを非表示にすることはできますか? その理由は、バージョン管理に SVN を使用しているためです。クラスを再生成するたびに、すべてのファイルが SVN で変更されたものとして表示されますが、唯一の違いはこのコメントです。できればコメントを完全に削除したいと思います。

ディレクティブはありますが、-no-headerヘッダー全体を削除したくないので、将来の世代はそれがツールから生成されたファイルであり、変更が上書きされることがわかります。タイムスタンプのみを削除したい。(または、組み込みのヘッダーを削除してから、何らかの方法で独自のヘッダーを挿入します。)

4

9 に答える 9

15

行を置き換えるこのMavenプラグインを使用しています// Generated on: 2011.02.23 at 02:17:06 PM GMT

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>maven-replacer-plugin</artifactId>
    <version>1.3.8</version>
    <executions>
        <execution> 
            <phase>prepare-package</phase>                          
            <goals>
                <goal>replace</goal>
            </goals>
        </execution>
    </executions>
    <configuration>                         
        <includes>                              
            <include>src/main/java/jaxb/*.java</include>            
        </includes>
        <token>^// Generated on.*$</token>
        <value>// Generated on: [TEXT REMOVED by maven-replacer-plugin]</value>                         
        <regexFlags>
            <regexFlag>MULTILINE</regexFlag>
        </regexFlags>
    </configuration>
</plugin>
于 2011-08-23T11:45:13.120 に答える
4

これは事後 2 年であることはわかっていますが、クラスが生成されるため、SVN では必ずしも必要ではありません。SVN に必要なものは、クラスを生成するためにソースに使用するスキーマまたはファイルです。クラスを生成するためのソースとツールがある限り、SVN のクラスは冗長であり、ご覧のとおり、SVN または任意の SCCS で問題があります。そのため、スキーマ ファイルを SVN に配置し、問題を完全に回避してください。

于 2015-03-04T14:10:09.983 に答える
3

cataの回答(賛成)に基づいて構築するには、maven-replacer-pluginが最適です。ファイルコメント(ライセンスなど)に置き換えることができるコメント全体(タイムスタンプだけでなく)を取り除く次のことを思いつきました。

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>maven-replacer-plugin</artifactId>
    <executions>
      <execution>
        <phase>prepare-package</phase>
          <goals>
            <goal>replace</goal>
          </goals>                   
        </execution>
      </executions>
      <configuration>
        <!-- assumes your xjc is putting source code here -->
        <includes>
          <include>src/main/java/**/*.java</include>
        </includes>
        <regex>true</regex>
        <regexFlags>
          <regexFlag>MULTILINE</regexFlag>
        </regexFlags>
        <replacements>
          <replacement>
            <token>(^//.*\u000a|^\u000a)*^package</token>
            <value>// your new comment
package</value>
          </replacement>         
        </replacements>
      </configuration>
   </plugin>

注意すべき 1 つの注意点は、<value>要素がテキストを文字どおりに扱うことです。したがって、置換テキストに改行が必要な場合は、pom.xml ファイルに改行を入れる必要があります (上記で説明したように)。

于 2011-09-09T18:02:28.920 に答える
3

あなたがすべきこと:

target でクラスを生成します。

${project.build.directory}/generated-sources

ターゲットを無視リスト (svn) に追加すれば、それだけです。

于 2016-12-16T23:34:36.277 に答える
3

オプションを使用できない場合は、生成されたファイルを自分で後処理できます。非常に特定のユースケースでは、プロジェクトでそのようにする必要がありました... Maven を使用し、Java クラスが生成された後、それらをコンパイルして配布可能な JAR にパッケージ化する前に、特定のスクリプトを実行します。

于 2011-02-23T16:16:56.487 に答える
0

maven-jaxb2-plugin を使用している場合は、タグ noFileHeader が true に設定されています。jaxb がその日付行を含むヘッダーを生成するのを防ぎます。

<noFileHeader>true</noFileHeader>
于 2021-12-01T20:11:27.797 に答える