Генерация исходного кода с помощью плагина maven-hibernate3 - PullRequest
2 голосов
/ 18 января 2011


Помимо создания других исходных файлов, я хочу создать один класс фабрики для классов DAO - DAOFactory.java.Для этой цели я использую hbmtemplate - с моим собственным * .ftl файлом.Проблема в том, что (как я правильно понимаю) файл создается для каждой сущности в базе данных.Можно ли сгенерировать этот файл только один раз?

Часть моего 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>

1 Ответ

1 голос
/ 18 января 2011

a) сгенерированный код обычно не должен входить в src/main/java !!!! Использовать target/generated-sources/somefoldername (или скорее: ${project.build.directory}/generated-sources/somefoldername) вместо этого!В противном случае ваш сгенерированный код окажется в вашем SCM, и вот тогда все станет грязно.Как правило: все, что вы редактируете, находится в src, все, что создает или редактирует maven, находится в цели .

Если инструменты гибернации не добавляют автоматически созданный исходный каталог в компиляторИсходные корни, вы можете сделать это с помощью 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) Кажется, вы не можете ограничить его одним классом.Поэтому вы можете удалить сгенерированные Java-файлы, которые вам не нужны.Стандартный способ сделать это - использовать плагин antrun:

<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>
...