2011-02-23 97 views
15

我们的项目使用XJC从XSD生成Java类。我使用的Java EE 6JAXB XJC可以抑制生成的类中的注释创建?

当所有我们已经重新生成的XSD,生成的类包括在文件的顶部,此评论:

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

是否有可能抑制此评论?原因是我们使用SVN进行版本控制,并且每次我们重新生成类时,每个文件都会显示为在SVN中发生更改,即使唯一不同的是此评论。因此,如果可能,我想完全删除评论。

有一个-no-header指令,但我不想删除整个标题,以便后代知道它是从工具生成的文件,并且修改将被覆盖。我只想删除时间戳。 (或者,我会删除内置头文件,然后以某种方式插入我自己的头文件。)

回答

3

如果无法使用某个选项,则可以自行后处理生成的文件。 对于一个非常具体的用例,我们必须在我们的项目中这样做... 我们使用Maven,并且在生成Java类之后并且在我们编译并将它们打包到不可用的JAR之前,我们执行特定的脚本。

14

我使用这个插件MVN替换了// 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> 
+1

此解决方案非常好,但您对ObjectFactory类做什么?每次它生成时,它的方法都会随机移动...... – unixorn 2013-02-13 15:20:58

+0

为什么在'prepare-package'阶段而不是'generate-sources'阶段执行此操作的任何原因?编译后您的版本会修改源代码... – 2017-04-24 08:29:33

3

要建立在CATA的答案(upvoted)的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> 

要注意的一个问题是<value>元素字面处理文本。所以如果你想在你的替换文本中换行,你需要在你的pom.xml文件中放一个换行符(就像我上面演示的那样)。

3

如果使用蚂蚁,下面的片段可更换的意见是有用的:

<replaceregexp 
     match="^// Generated on:.*$" 
     replace="// Generated on: [date removed]" 
     byline="true"> 
    <fileset dir="src"> 
     <include name="**/*.java"/> 
    </fileset> 
</replaceregexp> 
+0

谢谢,非常方便:-) – mmey 2013-12-17 22:02:36

4

我知道这是事实后2年,但因为生成的类他们不一定在SVN中需要。 SVN中需要的是架构或用于源代码生成类的任何文件。只要你有源代码和工具来生成这些类,SVN中的类是多余的,正如你所看到的,在SVN或任何SCCS中都存在问题。因此,将架构文件放在SVN中并完全避免该问题。

1

你应该你:

生成目标的类:

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

如果添加的目标忽略列表(SVN),这就是全部。

2

我迟到了,但从jaxb2-maven-plugin版本2.0起,有一个noGeneratedHeaderComments配置选项。(见JAXB-2 Maven Plugin Docs

您可以使用它像这样:

... 
<plugins> 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>jaxb2-maven-plugin</artifactId> 
     <version>2.3.1</version> 
     <executions> 
      <execution> 
       <id>xjc</id> 
       <goals> 
        <goal>xjc</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <target>2.1</target> 
      <sources> 
       <source>FirstXSD.xsd</source> 
       <source>SecondXSD.xsd</source> 
      </sources> 
      <xjbSources> 
       <xjbSource>OptionalBindings.xjb</xjbSource> 
      </xjbSources> 
      <noGeneratedHeaderComments>true</noGeneratedHeaderComments> 
     </configuration> 
     <dependencies> 
      <dependency> 
       <groupId>org.glassfish.jaxb</groupId> 
       <artifactId>jaxb-xjc</artifactId> 
       <version>${jaxb.version}</version> 
      </dependency> 
     </dependencies> 
    </plugin> 
</plugins> 
... 

所以不需要另一个插件或脚本来运行。

如果您想保留免责声明,您可以使用已经提到的技术之一将其注入需要的地方。

相关问题