2014-06-13 12 views
15

Ho un progetto multi-modulo. L'aspetto è attualmente aggiunto al progetto "core". Quando si fa un mvn clean install qui funziona. Tuttavia cercando di fare un mvn clean install sul progetto padre viene a mancare con questo errore durante la compilazione uno degli altri progetti:Errore durante la compilazione quando si utilizza il compilatore AspectJ invece di Javac

Il tipo org.hibernate.annotations.CacheConcurrencyStrategy non può essere risolto. Si è indirettamente riferimento dal file .class richiesti

Se aggiungo il nucleo di dipendenza Hibernate in quel progetto anche funziona, ma l'aggiunta di dipendenze a progetti che non dovrebbero avere la dipendenza non ha senso - quindi non è una soluzione. Durante la compilazione con javac funziona correttamente.

Qual è il motivo? E come posso risolvere il problema in modo da poter utilizzare il compilatore AspectJ senza perdite di dipendenza dai progetti che non dovrebbero avere questo?

ho questa configurazione nel POM genitore:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.5</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <complianceLevel>1.6</complianceLevel> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Aggiornamento

ho appena scoperto. L'esecuzione di mvn clean install non riesce ogni volta. Tuttavia, l'esecuzione di mvn [clean] install una volta non riesce. Quindi il funzionamento di mvn install senza clean funziona. Vedo che il builddef.lst nella cartella di destinazione è il motivo per cui funziona e non funziona a seconda che si esegua o meno la pulizia. Quindi ora la mia domanda è: come si genera automaticamente questo file?

Parent POM-file:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany</groupId> 
    <artifactId>core-lib</artifactId> 
    <name>core-lib</name> 
    <packaging>pom</packaging> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.5</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <complianceLevel>1.6</complianceLevel> 
       </configuration> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>1.7.4</version> 
     </dependency> 
    </dependencies> 

    <modules> 
     <module>core-xyz</module> 
     <module>core-xyz2</module> 
    </modules> 
</project> 
+0

Qual è lo stacktrace dell'eccezione e come è il tuo aspetto? – SpaceTrucker

+0

@KnightRider è necessario aggiornare la domanda anziché aggiungere un commento. –

+0

@ LeonardBrünings Fatto. –

risposta

3

Abilita debug sul invocazione Maven scavare più a fondo. Dovresti osservare che l'aspettoj compilazione viene invocato solo durante la prima invocazione di maven con clean. Dal momento che il file builddef.lst esiste già dopo la prima chiamata, invocando senza salta l'aspettoj compila.

Questo aspectj compilare comportamento plugin è stato osservato in precedenza ed è stato descritto qui:

http://out-println.blogspot.com/2007/08/compile-time-checks-with-aspectj-part-2.html?m=1

Avrete bisogno di guardare più in profondità per affrontare il problema di fondo, ma come un commentatore ha già suggerito, il compilatore AspectJ dovrebbe essere abilitato solo nei moduli che lo richiedono.

In caso contrario, le dipendenze aggiuntive sono necessarie per l'aspettoj compilazione, come già osservato. Ho incorporato l'aspettoj compilato nel mio lavoro senza problemi, limitandolo solo ai moduli che lo richiedono.

3

In base allo AspectJ compiler Maven plugin è possibile impostare argumentFileName per individuare uno builddef.lst esistente.

Quindi è possibile generare il builddef.lst e copiarlo nella cartella delle risorse e indicare al plug-in di AspectJ Maven di utilizzare tale file.

Problemi correlati