14

asm-4 を使用してコードを計測する javaagent を開発しようとしています。今のところ、私は非常に基本的な問題で立ち往生しています.javaagentのクラスローダーはasm依存関係を認識しないため、失敗します。エージェントが必要とするすべてのクラスを含む jar-with-dependencies (別名 maven ビルド プラグイン) を提供する必要がありますか、またはクラスを Java エージェントに追加する別の方法はありますか? クラスパスでjar asm-all.jarを直接参照しても役に立ちませんでした。Premain-Class 属性をアセンブリ プラグインで設定できなかったため、jar-with-dependencies のビルドは最初は役に立ちませんでした。助けていただければ幸いです;-)

4

5 に答える 5

12

わかりました、実験で見つけました。依存クラスは、maven アセンブリ プラグインによって作成できる jar の一部である必要があります。次に例を示します。

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <archive>
                <index>true</index>
                <manifest>
                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                    <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                </manifest>
                <manifestEntries>
                    <Premain-Class>test.agent.MyAgent</Premain-Class>
                </manifestEntries>
            </archive>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <!-- this is used for inheritance merges -->
                <phase>package</phase>
                <!-- append to the packaging phase. -->
                <goals>
                    <goal>single</goal>
                    <!-- goals == mojos -->
                </goals>
            </execution>
        </executions>
    </plugin>

jar を javaagent パスとして使用すると、すべて正常に動作します。

于 2013-04-08T20:16:07.960 に答える
1

MyAgent.jar 内の Manifest.mf ファイルで Class-Path を指定できると思います。

于 2013-05-02T09:27:16.220 に答える