3

私は実際のものを実装する前に単純なJavaエージェントプログラムを作成しようとしています。私はそれを実行することができません。明らかに私は何らかの設定やクラスパスの問題があります。見た目と試練の量は私に問題をもたらしませんでした。-javaagentをエラーなしで実行することができません

私が実行している場合:

java -cp ./demoAgent.jar -javaagent:./demoAgent.jar com.kingtigerbooks.demoMod.Main

私は次のエラーを取得する:

Exception in thread "main" java.lang.ClassNotFoundException: com.kingtigerbooks.demoAgent.Agent 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:280) 
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338) 
FATAL ERROR in native method: processing of -javaagent failed 
Abort trap 

は、私は私のMac上でこれを実行していますよ。エージェントのjarファイルはカレントディレクトリにあります。 jarファイルのマニフェストには、次のようになります。

Manifest-Version: 1.0 
Premain-class: com.kingtigerbooks.demoAgent.Agent 
Can-Redefine-Classes: true 

の場合は、クラスパスの問題のようなにおいが、あなたが見ることができるように私はクラスパス上のjarファイルが含まれています。どんな助けもありがとう。非常にシンプルなプロジェクトです。

+0

ここでは何かが明らかに奇妙です。私はUbuntuで多かれ少なかれ同じことをやってくれました。私は何が違うかは分かりません。理想的には、このタイプの問題をデバッグする方法のヒントです。 – DungeonTiger

+0

私は1.7を使っていたはずのときにjdk1.8で私のプロジェクトをコンパイルしました。 – djangofan

答えて

2

エージェントを実行すると、ではない通常のクラスパスにエージェントのjarを追加します。

を追加して、コマンドラインに-verbose:classを追加すると、クラスの読み込みプロセスについての情報を得ることができます。

+0

残念ながら、これは同じエラーに終わりました。コマンドラインはjava -javaagent:./demoAgent.jarでした。com.kingtigerbooks.demoMod.Main – DungeonTiger

+0

@DungeonTiger - クラスパスにメインクラスがありますか? – jtahlborn

+0

Hummm .... -javaagentオプションを削除すると、それが実行され、私の美しいHello Worldタイプの出力が得られるので、私はyesと言います。ええ。それは私にこの部分が正しいことを伝えます。また、Mainクラスについて、JARのdemoAgent.jarにあるAgentクラスについて不満を訴えていません。 – DungeonTiger

4

問題を解決しました。私は悪いjarファイルを持っていました。エージェントjarファイルにエージェントクラスが含まれていませんでした。正しいjarファイルをビルドし、javaagentパラメーターのjarファイルへの完全修飾パスを入れることで、すべてが機能します。

関連する問題