2016-04-19 19 views
0

Ich verwende maven-jaxb2-plugin, um die equals und hashCode Methoden zu generieren.maven-jaxb2-plugin: Wie benutze ich meine eigene EqualsStrategy

Ich habe eigene Strategien implementiert, abgeleitet von JAXBEqualsStrategy und JAXBHashCodeStrategy.

Gibt es eine Möglichkeit zu sagen, das Plugin diese Strategien anstelle der Standard-Strategien zu verwenden?

z. über eine Konfiguration wie

<arg>-Xequals=my.own.EqualsStrategy</arg> 

Antwort

0

waren Sie fast richtig:

<build> 
    <defaultGoal>test</defaultGoal> 
    <plugins> 
     <plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <configuration> 
       <extension>true</extension> 
       <args> 
        <arg>-XtoString</arg> 
        <arg>-Xequals</arg> 
        <arg>-Xequals-equalsStrategyClass=my.own.EqualsStrategy</arg> 
        <arg>-XhashCode</arg> 
        <arg>-XhashCode-hashCodeStrategyClass=my.own.HashCodeStrategy</arg> 
       </args> 
       <plugins> 
        <plugin> 
         <groupId>org.jvnet.jaxb2_commons</groupId> 
         <artifactId>jaxb2-basics</artifactId> 
        </plugin> 
       </plugins> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Wenn Ihre Strategien staatenlos sind (sollten sie normalerweise sein), können Sie Singleton-Instanzen als public static final INSTANCE Felder in Strategie-Klassen erstellen. Sie können dann das JAR mit Ihren Strategien als configuration/plugins/plugin (nur um es dem XJC-Klassenpfad hinzuzufügen) einbeziehen, und der generierte Code verwendet die Felder INSTANCE, anstatt neue Instanzen von Strategien zu erstellen.

Haftungsausschluss: Ich bin der Autor von JAXB2 Basics, JAXB Plugin-Paket in Frage.

+0

Das ist eine unkomplizierte Lösung. Ich wünschte, ich hätte das in der Dokumentation gefunden. Also, während ich bastelte, benutzte ich das Maven-Replacer-Plugin, um alle Vorkommen von JaxBEqualsStrategy mit my.own.EqualsStrategy aus dem generierten Code zu finden und zu ersetzen. – cbo