# Maven2 - Ant execution einmalig ausführen



## Mewel (7. Sep 2009)

Hallo,

ich führe innerhalb meiner POM mit dem maven-antrun-plugin ein ant-script aus. In diesem reichere ich eine xml-Datei mit ein paar Daten an. Das ganze wird in der "process-resources"-Phase ausgeführt.

Das Problem ist nun, daß immer wenn ich "compile" ohne vorheriges clean aufrufe, weitere Daten an die xml-Datein angehangen werden. Dies soll aber nur ein einziges mal geschehen. Im Normallfall wär mir das egal, weil ich immer ein clean davor machen könnte. Nur leider ruft das maven-jetty-plugin immer "compile" auf, welches dann wiederrum  "process-resources" aufruft.

1. Gibt es eine Möglichkeit eine execution nur einmal auszuführen, per property?
2. Warum ruft das jetty-plugin immer compile auf? Kann man das abstellen?
3. Oder könnte man das Problem mit ant lösen und dort irgendwie abfragen ob das Zeug schon in der xml-Datei steht?

Vielen Dank im Voraus!


----------



## maki (7. Sep 2009)

Mit scheint da stimmt etwas grundlegendes noch nicht...

Wenn alles richtig ist, dürfte es keinen unterschied zwischen einem clean install und einem install geben, das ist das Ziel.
Offensichtlich schreibtst du die XML Datei falsch, oder besser gesagt: du kopierst sie anscheinend nicht...
Wo liegt denn diese XML Datei? 
Wo änderst du sie? Die letzte Antwort sollte mit "unter target/.../" Anfangen, sonst hast du dein Problem.


----------



## Mewel (7. Sep 2009)

Die xml Datei liegt unter: /target/classes/config/hibernate/hibernate.cfg.xml. Anhängen tu ich das mapping, also z.B.
<mapping resource="org/mycore/backend/hibernate/tables/MCRACCESS.hbm.xml"/>. Das macht in ant ein xmltask.


----------



## maki (7. Sep 2009)

Dann solltest du vorher eine frische Version kopieren (zB. mit einem Ant copy task), dann hast du das Problem nicht mehr 

Darf man fragen welche informationen das nachgetragen werden? Villeciht gibt es ja einen besseren Weg...


----------



## Mewel (7. Sep 2009)

Hm neu kopieren ist schonmal ne Idee, war anscheinend zu einfach als das ich drauf kommen konnte .

Wie gesagt, es wird das Mapping der Tabellen für Hibernate nachgetragen. So richtig gefällt mir das mit ant auch noch nicht, aber ich komme mit dem hibernate plugin für maven noch nicht so ganz klar.

Danke schonma für die Antworten, finds gut das du so schnell antwortest .


----------



## maki (7. Sep 2009)

> Wie gesagt, es wird das Mapping der Tabellen für Hibernate nachgetragen.


WQas genau meinst du damit?
Das Schema etwa?


----------



## Mewel (7. Sep 2009)

Bin nicht so fitt in Hibernate, aber ich gehe mal davon aus das Schema = Mapping ist.

Ich habe also eine hibernate.cfg.xml:
[XML]
<hibernate-configuration>
  <session-factory>
    <!-- Database connection settings -->
    <!-- HSQLDB -->
    <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
    <property name="connection.url">jdbc:hsqldb:hsql://localhost:8298</property>
    <property name="connection.username">sa</property>
    <property name="connection.password"/>
    <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

    <property name="generate_statistics">false</property>

    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">org.mycore.backend.hibernate.MCRSessionContext</property>

    <!-- net/sf/ehcache/hibernate/Provider -->
    <property name="cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</property>
    <property name="cache.use_second_level_cache">true</property>
    <property name="cache.use_query_cache">true</property>
    <!-- more human readable cache entries -->
    <property name="cache.use_structured_entries">true</property>
    <!-- do not read to often from db just to save a few write operations -->
    <property name="cache.use_minimal_puts">false</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">false</property>

    <!-- misc options -->
    <property name="hibernate.bytecode.use_reflection_optimizer">true</property>
    <!-- Set batch_size to "0" in case of SQL batch Errors -->
    <property name="jdbc.batch_size">2000</property>
    <property name="default_batch_fetch_size">100</property>
</session-factory>
</hibernate-configuration>
[/XML]

In dieser Konfigurationsdatei fehlt noch das Mapping zu den Tabellen/Klassen. Das wird nun mittels dem ant-script dynamisch hinzugefügt also:

[XML]
<mapping resource="org/mycore/backend/hibernate/tables/MCRACCESS.hbm.xml"/>
<mapping resource="org/mycore/backend/hibernate/tables/MCRACCESSRULE.hbm.xml"/>
<mapping resource="org/mycore/backend/hibernate/tables/MCRCSTORE.hbm.xml"/>
...
[/XML]

Und diese Dateien sehen z.B. so aus:
[XML]
<hibernate-mapping package="org.mycore.backend.hibernate.tables">
  <class name="MCRACCESS" table="MCRACCESS" node="map">
    <composite-id class="org.mycore.backend.hibernate.tables.MCRACCESSPK" name="key" node="right">
      <key-property name="acpool" type="string" column="ACPOOL" length="64" node="@permission" />
      <key-property name="objid" type="string" column="OBJID" length="128" node="@id" />
    </composite-id>
    <many-to-one name="rule" column="rid" class="MCRACCESSRULE" cascade="none" node="rule" embed-xml="false" not-null="true" />
    <property name="creator" type="string" column="CREATOR" length="64" not-null="true" unique="false" node="@creator" />
    <property name="creationdate" type="timestamp" column="CREATIONDATE" length="64" not-null="true" unique="false"
      node="@date" />
  </class>
</hibernate-mapping>
[/XML]


----------



## maki (7. Sep 2009)

Das Maven Hibernate Plugin bietet doch schon genau das...


----------



## Mewel (7. Sep 2009)

Ok danke erstmal, ich glaube ich muss mich in das Thema einlesen.


----------

