MCPcopy Index your code
hub / github.com/alibaba/one-java-agent

github.com/alibaba/one-java-agent @one-java-agent-parent-0.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release one-java-agent-parent-0.0.1 ↗ · + Follow
599 symbols 1,313 edges 91 files 203 documented · 34%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

one-java-agent

JavaCI maven license Average time to resolve an issue Percentage of issues still open

目标

  1. 提供插件化支持,统一管理众多的Java Agent
  2. 插件支持install/unstall,需要插件方实现接口
  3. 支持传统的java agent,即已经开发好的java agent

插件系统

插件如果希望感知生命周期,可以实现 PluginActivator接口:

public interface PluginActivator {
    // 让插件本身判断是否要启动
    boolean enabled(PluginContext context);

    public void init(PluginContext context) throws Exception;

    /**
     * Before calling this method, the {@link PluginState} is
     * {@link PluginState#STARTING}, after calling, the {@link PluginState} is
     * {@link PluginState#ACTIVE}
     *
     * @param context
     */
    public void start(PluginContext context) throws Exception;

    /**
     * Before calling this method, the {@link PluginState} is
     * {@link PluginState#STOPPING}, after calling, the {@link PluginState} is
     * {@link PluginState#RESOLVED}
     *
     * @param context
     */
    public void stop(PluginContext context) throws Exception;
}

传统的java agent

插件目录下面放一个plugin.properties,并且放上原生的agent jar文件。

例如:

type=traditional
name=demo-agent
version=1.0.0
agentJarPath=demo-agent.jar

则 one java agent会启动这个demo-agent

编译开发

  • 本项目依赖 bytekit: https://github.com/alibaba/bytekit ,可能需要先mvn clean install bytekit
  • 执行测试: mvn clean package -DskipTests && mvn test
  • mvn clean package -P local -DskipTests会打包后安装最新到本地 ~/oneoneagent 目录下

Extension points exported contracts — how you extend this code

Converter (Interface)
A converter converts a source object of type S to a target of type T. Implementations of this interface are thread-safe [8 …
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/env/convert/Converter.java
AgentSpy (Interface)
TODO 是否用抽象类提高性能? @author hengyunabc 2020-12-11 [7 implementers]
one-java-agent-spy/src/main/java/java/oneagent/AgentSpy.java
Agent (Interface)
@author hengyunabc 2020-11-12 [4 implementers]
one-java-agent/src/main/java/com/alibaba/oneagent/Agent.java
ClassLoaderHandler (Interface)
插件方可以注册handler来拦载 ClassLoader#loadClass ,实现加载自己想要的类 @see ClassLoader#loadClass(String) @author hengyunabc 2020-12-09 [5 …
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/service/ClassLoaderHandler.java
Plugin (Interface)
@author hengyunabc 2019-02-27 [4 implementers]
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/plugin/Plugin.java
PluginActivator (Interface)
(no doc) [6 implementers]
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/plugin/PluginActivator.java
Component (Interface)
@author hengyunabc 2020-12-09 [4 implementers]
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/service/Component.java

Core symbols most depended-on inside this repo

length
called by 74
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/utils/StringUtils.java
equals
called by 68
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/env/PropertySource.java
toString
called by 33
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/utils/IOUtils.java
getName
called by 32
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/service/Component.java
getProperty
called by 26
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/plugin/PluginContext.java
info
called by 26
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/utils/AnsiLog.java
put
called by 25
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/env/ReadOnlySystemAttributesMap.java
name
called by 23
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/plugin/Plugin.java

Shape

Method 505
Class 72
Interface 20
Enum 2

Languages

Java100%

Modules by API surface

one-java-agent-plugin/src/main/java/com/alibaba/oneagent/utils/StringUtils.java44 symbols
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/plugin/PluginManagerImpl.java24 symbols
one-java-agent/src/main/java/com/alibaba/oneagent/NopAgent.java22 symbols
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/env/PropertySource.java21 symbols
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/env/MutablePropertySources.java21 symbols
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/utils/AnsiLog.java20 symbols
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/utils/ObjectUtils.java19 symbols
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/env/AbstractPropertyResolver.java19 symbols
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/plugin/OneAgentPlugin.java15 symbols
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/plugin/PluginManager.java14 symbols
one-java-agent-plugin/src/main/java/com/alibaba/oneagent/env/ReadOnlySystemAttributesMap.java14 symbols
one-java-agent/src/test/java/com/alibaba/oneagent/JavaVersionUtils.java12 symbols

For agents

$ claude mcp add one-java-agent \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact