我有一个方面使用aspectJ如下:
final int LINES, WORDS;
String[] metaData = new String[LINES = 5 * (WORDS = 3)]; // I don't like it
int i = 0;
while ((metaLine = metaRead.readLine()) != null) {
for (String s : metaLine.split("[ ]+")) metaData[i++] = s;
}
这方面是在模块方面。这个模块打包为jar。 PersistenceManagerImpl 在其他模块中,但我需要在模块方面使用它。对于依赖管理我使用maven。但这里当然是循环引用的问题。存在一些方法如何解决这个问题?
---------- ---------- EDIT
我只得到这个错误:
public aspect TestAspect {
pointcut classicPointcut(PersistenceManagerImpl object) : execution(manager.PersistenceManagerImpl.new(..)) && target(object);
after(PersistenceManagerImpl object) : classicPointcut(object){
System.err.println(object.getClass().getSimpleName());
}
}
当我将我的方面移动到同一个模块时,PersistenceManagerImpl何时获得正确的解决方案(当然)。但这不是我想要的。
答案 0 :(得分:0)
你能把编译代码的错误结果?您可以先尝试将另一个模块作为依赖项,然后将依赖项放在pom.xml中weaveDependency的aspectj maven插件中,如下所示:
....
<dependency>
<groupId>com.maventest</groupId>
<artifactId>mytest</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
....
....
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<showWeaveInfo>true</showWeaveInfo>
<complianceLevel>${maven.compiler.target}</complianceLevel>
<encoding>${project.build.sourceEncoding}</encoding>
<weaveDependencies>
<weaveDependency>
<groupId>com.maventest</groupId>
<artifactId>mytest</artifactId>
</weaveDependency>
</weaveDependencies>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
ps:你可以看到我的问题帖子问同样的事情here
答案 1 :(得分:0)
您的方面似乎特定于PersistenceManagerImpl
所在的模块,因此该模块应该是方面模块的依赖项。另一方面,该模块依赖于aspect模块,因为它需要它作为AspectJ Maven配置中的<aspectLibrary>
。确实是循环依赖,但却是不必要的依赖。您有两种选择:
public aspect TestAspect {
pointcut classicPointcut(Object object) :
execution(*..PersistenceManagerImpl.new(..)) &&
target(object);
after(Object object) : classicPointcut(object){
System.err.println(object.getClass().getSimpleName());
}
}