Generare fonte con Maven-Hibernate3 plug
-
12-10-2019 - |
Domanda
Oltre a generare altri file di origine, voglio generare una classe factory per le classi DAO - DAOFactory.java. Sto usando hbmtemplate a tal fine - con il mio file * .ftl.
Il problema è che (se ho capito bene) file viene generato per ogni entità nel database. E 'possibile generare il file solo una volta?
Una parte del mio pom.xml:
<execution>
<id>hbmtemplate0</id>
<phase>generate-sources</phase>
<goals>
<goal>hbmtemplate</goal>
</goals>
<configuration>
<components>
<component>
<name>hbmtemplate</name>
<outputDirectory>src/main/java</outputDirectory>
</component>
</components>
<componentProperties>
<revengfile>/src/main/resources/hibernate.reveng.xml</revengfile>
<propertyfile>src/main/resources/database.properties</propertyfile>
<jdk5>false</jdk5>
<ejb3>false</ejb3>
<packagename>my.package.name</packagename>
<format>true</format>
<haltonerror>true</haltonerror>
<templatepath>src/main/resources/reveng.templates/</templatepath>
<filepattern>DAOFactory.java</filepattern>
<template>DAOFactory.java.ftl</template>
</componentProperties>
</configuration>
</execution>
Soluzione
a) codice generato dovrebbe di solito non andare in src/main/java
!!!! Usa target/generated-sources/somefoldername
(o meglio: ${project.build.directory}/generated-sources/somefoldername
), invece! In caso contrario, il codice generato finirà nel vostro SCM e che, quando le cose si fanno disordinato. Come regola empirica:. tutto ciò che si modifica è in src, tutto Maven crea o modifiche è in target
Se gli strumenti Hibernate non aggiungere automaticamente la directory sorgente generato alle radici sorgente del compilatore, è possibile farlo con il buildhelper-maven-plugin
:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>add-source</id>
<phase>process-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>
${project.build.directory}/generated-sources/somefoldername
</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
b) Sembra che non si può limitare ad una sola classe. Così una cosa che si potrebbe fare è quello di eliminare i file Java generato non ti servono. Il metodo standard per fare cose del genere è quello di utilizzare il antrun plugin:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>process-sources</phase>
<configuration>
<target>
<delete>
<fileset
dir="${project.build.directory}/generated-sources/somefoldername"
includes="**/*.java" excludes="**/ClassYouWantToKeep.java" />
</delete>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>