Question

Mise à jour 5: J'ai téléchargé le dernier printemps ToolsSuite IDE basé sur la dernière Eclipse. Quand j'importer mon projet comme un projet Maven, Eclipse / STS semble utiliser les objectifs Maven pour la construction de mon projet. Cela signifie que AspectJ fonctionne enfin correctement dans Eclipse.

Mise à jour 4:. J'ai fini juste en utilisant le plugin Maven + AspectJ pour le tissage de la compilation de temps, sans passer par le mécanisme efficace d'Eclipse

Mise à jour 3: Il semble breaks plug-in Eclipse AspectJ la capacité de Eclipse correctement Publier sur Tomcat. Seulement en supprimant la capacité AspectJ sur un projet puis-je obtenir à nouveau correctement Publier. Très ennuyeux.

Mise à jour 2: Je travaille maintenant ce dans Eclipse. Cela me rend très mal à l'aise de dire cela, mais je ne sais pas comment je l'ai eu à travailler à partir soit Eclipse ou Maven construit. Il semble être un problème de compilation plutôt que d'une question d'exécution.

Mise à jour 1: Il semble que j'ai eu que cela fonctionne via Maven construit, mais je ne sais pas comment. Eclipse ne fonctionne toujours pas. La seule chose que j'ai changé dans le pom.xml est l'ajout de ces paramètres de configuration (insignifiante?):

<source>1.6</source>
<complianceLevel>1.6</complianceLevel>
<verbose>true</verbose>
<showWeaveInfo>true</showWeaveInfo>
<outxml>true</outxml>

Je suis en fait inquiet que j'ai une répétition de ce problème , où tout fonctionne de manière incohérente. Je garderai cette question mise à jour que je en savoir plus.

En ce qui concerne Eclipse, je fait quelques progrès en prenant les aspects binaires que je souhaite tisser - dans ce cas, ressort aspects.jar - et le copier sur mon chemin de classe. Je puis ajouter maintenant ce pot externe à mon Chemin Aspect . Après avoir fait cela, Eclipse me montre bien des marqueurs AspectJ dans mon code. Il est ennuyeux que je ne peux pas laisser printemps-aspects.jar dans mon Chemin de génération Java qui est maintenu par Maven pour moi via le plug-in Maven. Pour une raison quelconque, cependant, le plug-in AspectJ ne voit pas les aspects binaires à moins qu'ils ne explicitement ajoutés à la Chemin Aspect .


Message d'origine: @Configurable est une annotation de printemps qui permet aux dépendances à injecter dans des objets instanciés externe au printemps (par exemple, par Hibernate ou une classe usine)

.

J'utilisais cette annotation précédemment avec le tissage de charge en temps et la plupart du temps travaillé. De temps en temps je démarrer et rien ne serait injecté. Cette question a donné naissance cette question StackOverflow. Il n'y avait pas beaucoup de réponses, mais la plupart ont suggéré que j'essaie de compilation tissage à la place en raison d'une plus grande fiabilité.

I installé le plug-in AspectJ pour Eclipse et Maven. Ces deux produisent ce qui semble être des classes compilées correctement. J'ai ouvert l'une des classes dans un éditeur de texte avant la compilation AspectJ et n'a trouvé aucune référence à AspectJ. Je l'ai ouvert après la compilation AspectJ et à la fois Eclipse et Maven généré versions ont une référence à org.aspectj.weaver.MethodDeclarationLineNumber . Voilà pourquoi je suppose qu'il est correctement compilé. Le problème est qu'une fois déployé, aucune dépendance s'injecté.

Mon printemps applicationContext.xml ne comprend les éléments suivants:

    <context:spring-configured />

    <context:component-scan base-package="com.myapp" />

est-ce qui précède tout ce qui est nécessaire pour les classes marqué @Configurable avoir DI fait? Lors de la conversion de la charge en temps tissage à la compilation tissage, je l'ai enlevé META-INF / aop.xml , de mon applicationContext.xml , et tisserand Tomcat de printemps de mon context.xml .

Comment puis-je étudier ce problème plus loin? Quelles sont les causes possibles?

Était-ce utile?

La solution

Il travaille pour nous sur Maven en utilisant la compilation tissage de temps, essayez d'ajouter les plug-ins suivants:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
    <compilerVersion>1.6</compilerVersion>
    <fork>true</fork>
    <source>1.6</source>
    <target>1.6</target>
</configuration>
</plugin>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<executions>
    <execution>
        <id>compile</id>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <verbose>false</verbose>
            <outxml>true</outxml>
            <aspectLibraries>
                <aspectLibrary>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aspects</artifactId>
                </aspectLibrary>
            </aspectLibraries>
        </configuration>
        <goals>
            <goal>compile</goal>
        </goals>
    </execution>
    <execution>
        <id>test-compile</id>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <verbose>false</verbose>
            <aspectLibraries>
                <aspectLibrary>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aspects</artifactId>
                </aspectLibrary>
            </aspectLibraries>
        </configuration>
        <goals>
            <goal>test-compile</goal>
        </goals>
    </execution>
</executions>
<dependencies>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.6.4</version>
    </dependency>
</dependencies>
</plugin>

Son fait en deux étapes d'exécution différents pour vous permettre d'ajouter différentes bibliothèques d'aspect pour les tests et la compilation unité.

Vous aurez également besoin de la dépendance suivante ajoutée pour la bibliothèque printemps-aspects:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <scope>compile</scope>
    </dependency>

Autres conseils

I tissage charge de temps configuré avec succès dans mon application, si cela est une alternative pour vous.

Mon environnement:

  • JDK-1.6
  • Printemps-2.5.6
  • Assemblée parlementaire paritaire avec EclipseLink-1.1.0

Les détails de configuration:

configuration XML Spring:

<context:annotation-config/>
<context:spring-configured/>
<context:load-time-weaver/>

<bean id="baseEntity" class="package.name.BaseEntity" scope="prototype">
  <property name="historyHandler" ref="historyHandler" />
</bean>

<bean id="historyHandler" class="package.name.HistoryJpaHandler" scope="prototype">
  <property name="historyDao" ref="historyDao" />
</bean>

<bean id="historyDao" class="package.name.HistoryJpaDao">
  <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

annotations de printemps

@Configurable("baseEntity")
public abstract class BaseEntity

@Configurable("historyHandler")
public class HistoryJpaHandler extends SessionEventAdapter implements HistoryHandler 

Java VM Paramètre

<JAVA_HOME>/bin/java -javaagent:/full/path/to/spring-agent-2.5.6.jar

Les instances de historyHandler et baseEntitty sont créés par ecliselink. historyHandler dans baseEntitty et historyDao dans historyHandler est définie par la charge timeweaving.

Vous pouvez définir la VM paramètre dans la configuration d'Eclipse ou Tomcats catalina.sh/bat.

faire un champ d'une classe @Configurable Autowired lance NullPointerException si vous ne configurez pas votre ressort correctement pour cette annotation. procédez comme suit pour faire des annotations @Configurable fonctionnent correctement

Cette méthode est appelée AspectJ temps de construction tissage pour injecter des haricots de printemps à vos classes non-printemps-fait .

La première étape consiste à installer ces plugins Eclipse:

A partir de ces deux sites de mise à jour installer ce eclipse suggère:

http://download.eclipse.org/tools/ajdt/43/update
http://dist.springsource.org/release/AJDT/configurator/ 

Après l'installation, faites un clic droit sur le projet et faire:

Configure > Convert to Aspectj
Maven > Update

Ensuite, vous devez ajouter à votre pom.xml:

Dans les dépendances Ajouter:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>4.0.2.RELEASE</version>
</dependency>

Dans Plugins Ajouter:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.5</version>
            <configuration>
                <showWeaveInfo>true</showWeaveInfo>
                <source>1.7</source>
                <target>1.7</target>
                <Xlint>ignore</Xlint>
                <complianceLevel>1.7</complianceLevel>
                <encoding>UTF-8</encoding>
                <verbose>false</verbose>
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-aspects</artifactId>
                    </aspectLibrary>
                </aspectLibraries>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjrt</artifactId>
                    <version>1.7.0</version>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>1.7.0</version>
                </dependency>
            </dependencies>
        </plugin>

Important: NE PAS utiliser toutes les balises de <pluginManagment> sous étiquette <build>. votre pom.xml doit être quelque chose comme ceci:

<project ....>
    ....
    <dependencies>
        <dependency> 
                    ....
        </dependency>
                ....
    </dependencies>
    <build>
        <plugins>
            <plugin>
                            ....
            </plugin>
                        ....
        </plugins>
    </build>
</project>

enfin ajouter <context:spring-configured /> à votre application au printemps fichier de configuration de contexte.

Maintenant, vous pouvez annoter une classe POJO comme @Configurable et injecter des grains de printemps dans l'aide de l'annotation @Autowired. Ainsi chaque fois que vous faites une nouvelle instance de cette POJO il sera configuré (par exemple injecté avec des dépendances) automatiquement.

En ce qui concerne vos questions Eclipse classpath, vous pourriez trouver ce utile.

Le plugin m2eclipse a une option l'intégration de AJDT . L'intégration se lit la section aspectLibraries de la configuration du aspectj-maven-plugin, et contribue les pots à Eclipse de chemin d'aspect.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top