Questo dovrebbe essere semplice.AspectJ: Come ottenere punti per consigliare classi situate in altri progetti
Domanda
Come si ottiene un pointcut in un progetto di consigliare il codice/classi all'interno di un altro progetto?
Contesto
Sto lavorando in eclissi con due progetti. Per facilità di spiegazione, chiamiamola una progetto scientifico e l'altro progetto matematica e dicono che il progetto scientifico si basa sul progetto di matematica e sto sviluppando in entrambi i progetti, in concomitanza. Il progetto matematico è un prodotto di base, in produzione, e la vita sarà più facile se non modifico molto il codice.
Attualmente sto eseguendo il debug dell'interazione tra questi due progetti. Per aiutarlo, sto scrivendo un Aspect (all'interno del progetto scientifico) per registrare le informazioni chiave mentre il codice matematico (e il codice scientifico) vengono eseguiti.
Esempio
ho eseguendo un aspetto semplice esempio lungo le linee di:
package org.science.example;
public aspect ScientificLog {
public pointcut testCut() : execution (public * *.*(..));
before() : testCut() {
//do stuff
}
}
Problemi
Il problema è, non importa quale pointcut Creo, esso consigliati solo codice dal progetto scientifico . Nessuna classe da
org.math.example
è crosscut, A TUTTI!
Ho provato ad aggiungere al progetto matematica al INPATH del progetto scienza andando a
proect properties > AspectJ Build > Inpath
e cliccando
progetto del componente aggiuntivo e scegliendo il progetto
matematica. Non ha funzionato, ma sembra che ho bisogno di fare qualcosa in questo senso.
Grazie, in anticipo, per eventuali suggerimenti ...
-gMale
EDIT 1:
Dopo aver scritto questo, ho notato il progetto sta dando il seguente errore:
Caused by: org.aspectj.weaver.BCException: Unable to continue, this version of AspectJ supports classes built with weaver version 6.0 but the class com.our.project.adapter.GenericMessagingAdapter is version 7.0 when batch building BuildConfig[null] #Files=52 AopXmls=#0
Quindi forse questo è configurato correttamente e l'errore è più sottile. A proposito, la classe menzionata proviene dal "progetto scientifico", per così dire. Questo succede anche dopo aver pulito il progetto. Attualmente sto googling questo errore ...
EDIT 2:
ho trovato la soluzione per l'errore precedente in comment #5 here
Il problema è il file pom del maven-aspectj-plugin dichiara una dipendenza aspectjtools versione 1.6 .7. Quindi, quando si configura il plugin, è necessario modificare la dipendenza del transiente. Ecco lo snippet di codice correlato per il file pom che corregge il problema specificando la versione 1.6.9 anziché 1.6.7:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.3</version>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.6.9</version>
</dependency>
</dependencies>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
Grazie, hai ragione. Ho appena risolto l'eccezione e aggiornato la mia domanda sopra, di conseguenza. Sfortunatamente, per il momento, sono stato essenzialmente istruito a portare il "progetto matematico" direttamente nel "progetto scientifico". Chiaramente, questo evita il problema, ma non sono in grado di determinare l'impatto della correzione del secondo bug perché la base del codice è completamente diversa ora e il backtracking in sovversione richiederebbe troppo tempo. Grazie per l'aiuto. Poiché tu sei l'unica risposta, voterò tutti i tuoi messaggi e ti ricompenserò della risposta. Grazie! – gMale