プロファイラーと基本アプリケーション (JUnit テストあり) の 2 つのプロジェクトがあります。
プロファイラーは、Javassist を使用して基本的なアプリケーションを計測します。
プロファイラーが基本アプリケーション内にある場合、正常に動作します。プロファイラーが基本アプリケーションの外部にある場合、基本アプリケーションの jar ファイルを Eclipse のビルド パスにインポートして、アプリケーションを計測できるようにする必要があります。
EMMA のように、コマンド ラインで基本的なアプリケーションでプロファイラーを実行したいと考えています。
java -jar profiler.jar run application.jar
しかし、プロファイラーに指示する方法がわかりません。OK、この jar を計測します。
これが私のプロファイラーのメインコードです:
public static void main(String[] args) throws Exception {
Loader loader = new Loader();
loader.addTranslator(ClassPool.getDefault(), new Profiler());
try {
loader.run("com.application.bookstore.test.Test", null);
} catch (Throwable e) {
e.printStackTrace();
}
}
私はそれをやろうとしました:
final String arg = args[0];
final String[] commandArgs = new String[args.length - 1];
System.arraycopy(args, 1, commandArgs, 0, commandArgs.length-1);
loader.run(arg, commandArgs);
しかし、実行すると、次のようになります。
[kdelemme@pdkdelemme build]$ java -jar profiler.jar bookstore.jar
java.lang.ClassNotFoundException: bookstore.jar
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at javassist.Loader.delegateToParent(Loader.java:429)
at javassist.Loader.loadClass(Loader.java:315)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at javassist.Loader.run(Loader.java:289)
at com.modeln.Profiler.main(Profiler.java:93)
そこで、メイン クラス ディレクトリに直接実行しようとしました。
[kdelemme@pdkdelemme test]$ ls
profiler.jar Test.class
[kdelemme@pdkdelemme test]$ java -jar profiler.jar Test
java.lang.NoClassDefFoundError: Test (wrong name: com/application/bookstore/test/Test)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.lang.ClassLoader.defineClass(ClassLoader.java:480)
at javassist.Loader.findClass(Loader.java:380)
at javassist.Loader.loadClass(Loader.java:312)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at javassist.Loader.run(Loader.java:289)
at com.modeln.Profiler.main(Profiler.java:93)
外部の jar プロジェクトでプロファイラーを実行する方法について何かアイデアはありますか? どうもありがとう!