java - comando - xjc example
JAXB XJC ¿Es posible suprimir la creación de comentarios en las clases generadas? (7)
Estoy usando este complemento mvn que reemplaza la // Generated on: 2011.02.23 at 02:17:06 PM GMT
línea // 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>
Nuestro proyecto utiliza XJC para generar clases Java desde un XSD. Estoy usando JAVA EE 6.
Cuando todos los XSD que tenemos se vuelven a generar, las clases generadas incluyen este comentario en la parte superior del archivo:
// Generated on: 2011.02.23 at 02:17:06 PM GMT
¿Es posible suprimir este comentario? La razón es que usamos SVN para el control de versiones, y cada vez que regeneramos nuestras clases, cada archivo se muestra como cambiado en SVN, aunque lo único que difiere es este comentario. Así que me gustaría eliminar el comentario por completo si es posible.
Hay una directiva -no-header
, pero no quiero eliminar todo el encabezado, para que las generaciones futuras sepan que es un archivo generado a partir de una herramienta y que las modificaciones se sobrescriban. Sólo quiero eliminar la marca de tiempo. (O alternativamente, eliminaría el encabezado incorporado y luego insertaría mi propio encabezado de alguna manera).
Lo que debes hacer:
Genera tus clases en target:
${project.build.directory}/generated-sources
Si agrega target a ignore list (svn), eso es todo.
Para construir sobre la respuesta de cata (upvoted) el maven-replacer-plugin es el camino a seguir. Se me ocurrió lo siguiente que elimina todo el comentario (no solo la marca de tiempo) que puede reemplazar con su comentario de archivo (licencia, etc.).
<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>
Lo único que hay que tener en cuenta es que el elemento <value>
trata el texto literalmente. Entonces, si desea un salto de línea en su texto de reemplazo, debe colocar un salto de línea en su archivo pom.xml (como lo he demostrado anteriormente).
Sé que esto es 2 años después del hecho, pero debido a que las clases se generan, no necesariamente se necesitan en SVN. Lo que debe estar en SVN es el esquema o cualquier archivo que use para que las fuentes generen las clases. Mientras tengas la fuente y las herramientas para generar las clases, las clases en SVN son redundantes y, como viste, problemáticas en SVN o en cualquier SCCS. Así que ponga el archivo de esquema en SVN y evite el problema por completo.
Si no es posible usar una opción, usted puede postprocesar los archivos generados. Para un caso de uso muy específico, tuvimos que hacerlo de la misma manera en nuestro proyecto ... Usamos Maven y ejecutamos un script específico una vez que se han generado las clases de Java y antes de compilarlas y empaquetarlas en un JAR de distriuable.
Si usas ant , el siguiente fragmento de código puede ser útil para reemplazar los comentarios:
<replaceregexp
match="^// Generated on:.*$"
replace="// Generated on: [date removed]"
byline="true">
<fileset dir="src">
<include name="**/*.java"/>
</fileset>
</replaceregexp>
jaxb2-maven-plugin
tarde a la fiesta, pero desde la versión 2.0 del jaxb2-maven-plugin
, hay una opción de configuración noGeneratedHeaderComments
. (ver los documentos de complemento JAXB-2 Maven )
Puedes usarlo así:
...
<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>
...
Así que no hay necesidad de otro plugin o script para ejecutar.
Si desea mantener un descargo de responsabilidad, puede utilizar una de las técnicas mencionadas anteriormente para inyectarla donde se desee.