Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在外部jar/其他项目中调用方面方法_Java_Gradle_Aspectj_Spring Aop_Load Time Weaving - Fatal编程技术网

Java 无法在外部jar/其他项目中调用方面方法

Java 无法在外部jar/其他项目中调用方面方法,java,gradle,aspectj,spring-aop,load-time-weaving,Java,Gradle,Aspectj,Spring Aop,Load Time Weaving,我有一个外部jar,其中包含一个方面,该方面将由我的其他项目使用,但我无法调用外部jar中的方面方法。 当我搜索时,我知道我必须根据自己的情况使用加载时间编织。所以我补充说 <aop:aspectj-autoproxy /> <context:load-time-weaver aspectj-weaving="autodetect" weaver-class="org.springframework.instrument.classloading.Reflect

我有一个外部jar,其中包含一个方面,该方面将由我的其他项目使用,但我无法调用外部jar中的方面方法。 当我搜索时,我知道我必须根据自己的情况使用加载时间编织。所以我补充说

<aop:aspectj-autoproxy />
<context:load-time-weaver aspectj-weaving="autodetect"
        weaver-class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver"/>

在我的应用程序上下文xml文件中,并在外部jar/项目的META-INF中添加了一个aop.xml文件,其中包含以下代码

<!DOCTYPE aspectj PUBLIC  "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
   <weaver>
    <!-- only weave classes in our application-specific packages -->
    <include within="com.mstack.genie.audit.aop.*"/>
   </weaver>

   <aspects>
    <!-- weave in just this aspect -->        
    <aspect name="com.mstack.genie.audit.aop.AuditAspect"/>
   </aspects>
</aspectj>


我还在主项目中添加了
spring instrument.jar
。即使在所有这些之后,我也无法从外部jar调用aspect方法。我看到其他链接也有同样的问题,但我的问题仍然没有解决。我使用gradle作为我的构建工具。有人能帮我一下吗?

你是用Java代理(
-javaagent…
)启动Java虚拟机的吗?我应该用Java代理吗?我对此表示怀疑,因为它是我在eclipse上运行的SpringWeb应用程序。所以这个java代理部分对我来说总是有点棘手。我需要使用java代理吗?我是出于无知问的好吧,实际上最好的办法是使用编译时编织,但如果这不适用,通过java代理方式进行加载时编织将比使用反射对抗类装入器干净得多,就像Spring在这种情况下会尝试做的一样,问题是当我的服务是REST服务时,所有这些都是REST服务的一部分。没有更干净的方法来完成这件事吗?我确实在应用程序上下文中尝试了加载时编织器,但仍然不起作用。好吧,这是您的选择,毕竟,我会选择编译时编织,但是使用适当的java代理进行加载时编织也会起作用。如果您选择使用classloader magic,它仍然是可行的,但我不愿意帮助您调试它。您是否使用Java代理(
-javaagent…
)启动Java VM?我应该使用Java代理吗?我对此表示怀疑,因为它是我在eclipse上运行的SpringWeb应用程序。所以这个java代理部分对我来说总是有点棘手。我需要使用java代理吗?我是出于无知问的好吧,实际上最好的办法是使用编译时编织,但如果这不适用,通过java代理方式进行加载时编织将比使用反射对抗类装入器干净得多,就像Spring在这种情况下会尝试做的一样,问题是当我的服务是REST服务时,所有这些都是REST服务的一部分。没有更干净的方法来完成这件事吗?我确实在应用程序上下文中尝试了加载时编织器,但仍然不起作用。好吧,这是您的选择,毕竟,我会选择编译时编织,但是使用适当的java代理进行加载时编织也会起作用。如果您选择使用classloader magic,它仍然是可行的,但我不愿意帮助您调试它。