如何使用命令行将切入点附加到 .jar 文件中的类方法?

Posted

技术标签:

【中文标题】如何使用命令行将切入点附加到 .jar 文件中的类方法?【英文标题】:How to attach a pointcut to a to a method of class residing inside a .jar file using command line? 【发布时间】:2014-03-10 11:31:04 【问题描述】:

我是 AOP 的新手。我在 HookShow.java 文件中创建了一个类:

public class HookShow

        void show(String msg)
        
            System.out.println("In show :"+msg);
        
        public static void main(String[] args)
        
            HookShow cm=new HookShow();
            cm.show("called from main method");

        

然后我编译它并将生成的 .class 文件添加到 .jar 文件中:

jar cf HSHOW.jar HookShow.class

现在我有一个 HSHOW.jar。现在我正在创建一个切入点的切面,该切入点在调用show() 时执行。但我不知道如何引用该 jar 文件中的类和方法。 以下是我的方面文件:

public aspect AspectHookShow

   pointcut changemsgPointcut( String str) :execution(void HookShow.show(String)) && args(str);

   before(String str ) : changemsgPointcut( str)
   
      System.out.println("inside pointcut :"+str);
       

所以请谁能告诉我如何在我的 jar 文件中引用类中的方法。

【问题讨论】:

我不知道 aspectJ,但我担心您可以在类路径中添加 .jar 并简单地导入该类 @Youngistan 你能告诉我一个声明,通过它我可以在那个 .jar 中导入一个 cals。正如你所说,我在环境变量的类路径中添加了这个 jar 的路径。 sachin 你是否使用任何 IDE 如果是,那么只需转到项目的属性并添加外部 jar 没有我没有使用任何 ide 我通过 cmd 行和记事本做的事情。 【参考方案1】:

经过 3 小时的研究,我发现了 3 种方法来实现上述内容,好在我不必对代码进行太多更改,我只需要在 cmd 提示符下执行一些命令即可:

第一种方式:

我从 Oreilly AspectJ Cookbook 中得到了一种方法:

步骤: 1:使用传统的javac命令编译HookShow类:

javac HookShow.java

2:将生成的HookShow.class文件打包成一个名为MyApp.jar的.jar文件:

jar -cvf MyApp.jar HookShow.class

3:使用 ajc 命令编译 AspectHookShow.java 方面,在命令行中使用 -inpath 选项指定新的 MyApp.jar:

> ajc -inpath MyApp.jar AspectHookShow.java

-inpath 选项强制 ajc 编译器将 Java 字节码从提供的 .jar 文件中提取到 -d 选项指定的目标目录中。然后 ajc 编译器将提取的字节码包含在方面编织过程中。

4:如果在使用 ajc 编译期间没有发生错误,那么您将成功地将 MyApp.jar 文件中包含的类与 AspectHookShow 方面结合在一起。因为 ajc 命令从提供给 -inpath 选项的 .jar 文件中提取类,所以不再需要它们来运行应用程序。但是,您可以选择在运行 ajc 命令时使用 -outjar 选项将新应用程序重新打包到自己的 .jar 文件中:

> ajc  -inpath MyApp.jar -outjar MyAspectOrientedApp.jar AspectHookShow.java

这会生成一个 MyAspectOrientedApp.jar,其中包含您的应用程序的方面和类,然后可以使用传统的 java 命令运行:

> java -classpath MyAspectOrientedApp.jar HookSHow

第二种方式:

执行以下命令:

>ajc -janars aspectjrt.jar ;HSHOW.jar AspectHookShow.java -outjar Final.jar

这将创建 Final.jar。然后我把这个 jar 放在我的类路径中,现在我可以在任何类中使用它了。

希望它对像我这样的其他人有用。

【讨论】:

以上是关于如何使用命令行将切入点附加到 .jar 文件中的类方法?的主要内容,如果未能解决你的问题,请参考以下文章

通过命令行将第三方jar包上传到Nexus3

如何使用 gradle 将时间戳附加到生成的 jar 中?

用命令将本地jar包导入到本地maven仓库

如何将 javadoc 或源附加到 libs 文件夹中的 jar?

用命令将本地jar包导入到本地maven仓库

用命令将本地jar包导入到本地maven仓库