Java Agent疑问

今天看了一篇博客,Java 调式、热部署、JVM 背后的支持者 Java Agent
照着步骤尝试,遇到的问题是:
(1) JVM 启动参数 -javaagent:xxx.jar 的形式运行的时候,在intellij中是OK的;但是在命令行中运行就不行,只出来这样的结果:

clipboard.png

但是在intellij中运行,是可以出来完整的

clipboard.png

命令行运行的命令如下:

javac PersonTest.java 
java -javaagent:/Users/name/github/java/java_agent_demo/build/libs/java_agent_demo-1.0-SNAPSHOT.jar PersonTest

其中 java_agent_demo-1.0-SNAPSHOT.jar是用gradle生成的 ./gradlew clean build -x test

同样的jar,一个是在intellij IDE中运行的,可以出来想要的效果,一个是在命令行运行的,却没有得到想要的结果。实在不知道原因在哪里。另外,从上面的两张截图可以看到,intellij加载的类,是多于 纯命令行的加载类。 以下是intellij中执行的结果中的语句

/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java -javaagent:/Users/yangxiaohuan/my_private/github/my_public/java/java_agent_demo/build/libs/java_agent_demo-1.0-SNAPSHOT.jar "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=49943:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/tools.jar:/Users/yangxiaohuan/my_private/github/my_public/java/java_agent_demo/out/test/classes:/Users/yangxiaohuan/my_private/github/my_public/java/java_agent_demo/out/production/classes:/Users/yangxiaohuan/.gradle/caches/modules-2/files-2.1/org.javassist/javassist/3.25.0-GA/442dc1f9fd520130bd18da938622f4f9b2e5fba3/javassist-3.25.0-GA.jar:/Users/yangxiaohuan/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar:/Users/yangxiaohuan/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar PersonTest
premain
com.agent.MyTransformer
com.agent.MyCustomAgent
java.util.concurrent.ConcurrentHashMap$ForwardingNode
sun.reflect.DelegatingMethodAccessorImpl
sun.reflect.NativeMethodAccessorImpl
sun.instrument.InstrumentationImpl$1
[Ljava.lang.reflect.Method;
java.lang.instrument.ClassFileTransformer
java.security.BasicPermissionCollection
java.security.UnresolvedPermission
java.security.AllPermission
java.io.FilePermissionCollection
java.io.FilePermission$1
java.io.FilePermission
sun.net.www.MessageHeader
sun.net.www.protocol.file.FileURLConnection
sun.net.www.URLConnection
java.net.URLConnection
java.security.Permissions
java.security.PermissionCollection
sun.nio.ByteBuffered
java.lang.Package
sun.misc.URLClassPath$FileLoader$1
sun.misc.Resource
sun.misc.URLClassPath$FileLoader
sun.misc.IOUtils
sun.misc.ExtensionDependency
java.util.LinkedList$Node
java.util.LinkedList
java.util.AbstractSequentialList
java.util.zip.ZipFile$ZipFileInflaterInputStream
java.util.zip.InflaterInputStream
java.util.zip.ZStreamRef
java.util.zip.Inflater
java.util.zip.ZipFile$ZipFileInputStream
java.util.jar.JarFile$JarFileEntry
java.util.jar.JarEntry
java.util.zip.ZipEntry
sun.misc.JarIndex
java.nio.DirectLongBufferU
java.nio.LongBuffer
java.nio.DirectByteBuffer
java.nio.MappedByteBuffer
sun.nio.ch.DirectBuffer
sun.misc.PerfCounter$CoreCounters
sun.misc.Perf
sun.misc.Perf$GetPerfAction
sun.misc.PerfCounter
java.util.zip.ZipCoder
java.util.ArrayDeque
java.util.Deque
java.util.Queue
sun.nio.cs.UTF_16
sun.nio.cs.UTF_16LE
sun.nio.cs.UTF_16BE
sun.nio.cs.ISO_8859_1
sun.nio.cs.US_ASCII
java.nio.charset.StandardCharsets
java.util.jar.JavaUtilJarAccessImpl
sun.misc.JavaUtilJarAccess
java.util.jar.JarFile
sun.misc.FileURLMapper
sun.misc.URLClassPath$JarLoader$1
java.util.zip.ZipFile$1
sun.misc.JavaUtilZipFileAccess
java.util.zip.ZipFile
java.util.zip.ZipConstants
sun.misc.URLClassPath$JarLoader
sun.misc.URLClassPath$Loader
sun.misc.URLClassPath$3
sun.net.util.URLUtil
java.net.URLClassLoader$1
[Lsun.instrument.TransformerManager$TransformerInfo;
sun.instrument.TransformerManager$TransformerInfo
sun.instrument.TransformerManager
sun.instrument.InstrumentationImpl
java.lang.instrument.Instrumentation
java.lang.InternalError
java.lang.SystemClassLoaderAction
sun.misc.Launcher$AppClassLoader$1
sun.net.www.protocol.jar.Handler
sun.misc.URLClassPath
java.util.HashSet
[Ljava.security.Principal;
java.security.Principal
java.security.ProtectionDomain$Key
java.security.ProtectionDomain$2
sun.misc.JavaSecurityProtectionDomainAccess
java.security.ProtectionDomain$JavaSecurityAccessImpl
sun.misc.JavaSecurityAccess
[Ljava.net.URL;
sun.net.www.protocol.file.Handler
java.net.URLStreamHandler
java.net.Parts
java.lang.CharacterDataLatin1
java.lang.CharacterData
sun.util.locale.LocaleUtils
java.util.Locale$LocaleKey
sun.util.locale.LocaleObjectCache$CacheEntry
sun.util.locale.BaseLocale$Key
sun.util.locale.BaseLocale$Cache
sun.util.locale.BaseLocale
java.util.concurrent.ConcurrentHashMap$EntrySetView
java.util.concurrent.ConcurrentHashMap$ValuesView
java.util.concurrent.ConcurrentHashMap$KeySetView
java.util.concurrent.ConcurrentHashMap$CollectionView
[Ljava.util.concurrent.ConcurrentHashMap$CounterCell;
java.util.concurrent.ConcurrentHashMap$CounterCell
[Ljava.util.concurrent.ConcurrentHashMap$Node;
java.util.concurrent.ConcurrentHashMap$Node
[Ljava.util.concurrent.ConcurrentHashMap$Segment;
[Ljava.util.concurrent.locks.ReentrantLock;
[Ljava.util.concurrent.locks.Lock;
java.util.concurrent.ConcurrentHashMap$Segment
java.util.concurrent.locks.ReentrantLock
java.util.concurrent.locks.Lock
java.util.concurrent.ConcurrentHashMap
java.util.concurrent.ConcurrentMap
java.util.Locale$Cache
sun.util.locale.LocaleObjectCache
java.util.Locale
java.util.BitSet
sun.net.www.ParseUtil
java.io.FileInputStream$1
java.util.HashMap$TreeNode
java.lang.reflect.Array
java.nio.charset.CoderResult$2
java.nio.charset.CoderResult$1
java.nio.charset.CoderResult$Cache
java.nio.charset.CoderResult
java.nio.HeapCharBuffer
java.nio.CharBuffer
sun.nio.cs.StreamDecoder
java.io.FileReader
java.io.InputStreamReader
java.io.BufferedReader
java.io.Reader
java.lang.Readable
sun.misc.MetaIndex
[Ljava.io.File;
java.util.StringTokenizer
sun.misc.Launcher$ExtClassLoader$1
java.net.URLClassLoader$7
sun.misc.JavaNetAccess
java.util.WeakHashMap$KeySet
java.util.Collections$SetFromMap
[Ljava.util.WeakHashMap$Entry;
java.util.WeakHashMap$Entry
java.lang.ClassLoader$ParallelLoaders
sun.security.util.Debug
sun.misc.Launcher$Factory
java.net.URLStreamHandlerFactory
java.lang.Compiler$1
java.lang.Compiler
java.lang.IllegalArgumentException
java.lang.System$2
sun.misc.JavaLangAccess
sun.misc.OSEnvironment
[Ljava.lang.Integer;
[Ljava.lang.Number;
java.lang.Integer$IntegerCache
sun.misc.NativeSignalHandler
sun.misc.Signal
java.lang.Terminator$1
sun.misc.SignalHandler
java.lang.Terminator
java.lang.ClassLoader$NativeLibrary
java.util.LinkedHashMap$Entry
java.io.ExpiringCache$Entry
[Ljava.io.File$PathStatus;
[Ljava.lang.Enum;
java.lang.ClassLoader$3
java.lang.StringCoding$StringEncoder
java.nio.file.Path
java.nio.file.Watchable
java.io.File$PathStatus
java.lang.Enum
java.io.ExpiringCache$1
java.util.LinkedHashMap
java.io.ExpiringCache
java.io.UnixFileSystem
java.io.FileSystem
java.io.DefaultFileSystem
java.io.BufferedWriter
java.nio.Bits$1
sun.misc.JavaNioAccess
java.util.concurrent.atomic.AtomicLong
java.nio.ByteOrder
java.nio.Bits
java.nio.HeapByteBuffer
java.nio.ByteBuffer
sun.nio.cs.UTF_8$Encoder
java.nio.charset.CharsetEncoder
sun.nio.cs.ArrayEncoder
sun.security.action.GetPropertyAction
sun.nio.cs.StreamEncoder
java.io.OutputStreamWriter
java.io.Writer
java.io.BufferedOutputStream
java.io.PrintStream
java.io.FilterOutputStream
sun.reflect.misc.ReflectUtil
java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1
java.security.PrivilegedExceptionAction
java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
java.util.concurrent.atomic.AtomicReferenceFieldUpdater
java.io.BufferedInputStream
java.io.FilterInputStream
java.io.FileOutputStream
java.io.OutputStream
java.io.Flushable
java.io.FileDescriptor$1
sun.misc.JavaIOFileDescriptorAccess
java.io.FileDescriptor
java.io.FileInputStream
sun.misc.Version
java.lang.Runtime
java.util.Hashtable$Enumerator
java.util.Iterator
java.util.Enumeration
java.util.Objects
java.util.Collections$SynchronizedSet
java.util.Collections$SynchronizedCollection
java.util.Hashtable$EntrySet
java.nio.charset.CodingErrorAction
sun.nio.cs.UTF_8$Decoder
java.nio.charset.CharsetDecoder
sun.nio.cs.ArrayDecoder
java.lang.StringCoding$StringDecoder
[Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
[Ljava.lang.ref.WeakReference;
[Ljava.lang.ref.Reference;
java.lang.ThreadLocal$ThreadLocalMap$Entry
java.lang.ThreadLocal$ThreadLocalMap
java.lang.StringCoding
sun.reflect.DelegatingConstructorAccessorImpl
sun.reflect.NativeConstructorAccessorImpl
sun.reflect.ReflectionFactory$1
java.lang.Class$1
[Ljava.lang.reflect.Constructor;
[Ljava.lang.reflect.Executable;
sun.nio.cs.UTF_8
sun.nio.cs.Unicode
sun.nio.cs.HistoricallyNamedCharset
java.util.Arrays
java.lang.reflect.ReflectAccess
sun.reflect.LangReflectAccess
java.lang.reflect.Modifier
java.lang.ClassValue$ClassValueMap
java.util.WeakHashMap
sun.reflect.annotation.AnnotationType
java.lang.Class$AnnotationData
sun.reflect.generics.repository.ClassRepository
sun.reflect.generics.repository.GenericDeclRepository
sun.reflect.generics.repository.AbstractRepository
[Ljava.lang.reflect.Field;
[Ljava.lang.reflect.Member;
[Ljava.lang.reflect.AccessibleObject;
java.lang.Class$Atomic
java.lang.Class$ReflectionData
java.lang.Class$3
java.util.concurrent.atomic.AtomicInteger
java.lang.ThreadLocal
sun.nio.cs.StandardCharsets$Cache
sun.nio.cs.StandardCharsets$Classes
sun.nio.cs.StandardCharsets$Aliases
sun.util.PreHashedMap
sun.nio.cs.StandardCharsets
sun.nio.cs.FastCharsetProvider
java.nio.charset.spi.CharsetProvider
java.nio.charset.Charset
java.lang.ref.Finalizer$FinalizerThread
java.lang.Math
[Ljava.util.Hashtable$Entry;
java.util.Hashtable$Entry
sun.misc.VM
[Ljava.util.HashMap$Node;
[Ljava.util.Map$Entry;
java.util.HashMap$Node
java.util.Map$Entry
java.util.HashMap
sun.reflect.Reflection
[Ljava.lang.String;
[Ljava.lang.CharSequence;
java.lang.NoSuchMethodError
java.lang.IncompatibleClassChangeError
sun.misc.SharedSecrets
java.lang.ref.Reference$1
sun.misc.JavaLangRefAccess
[Ljava.lang.Thread;
[Ljava.lang.Runnable;
java.lang.ref.ReferenceQueue$Lock
java.lang.ref.ReferenceQueue$Null
java.util.Collections$UnmodifiableRandomAccessList
java.util.Collections$UnmodifiableList
java.util.Collections$UnmodifiableCollection
java.util.Collections$EmptyMap
java.util.AbstractMap
java.util.Collections$EmptyList
java.util.Collections$EmptySet
java.util.AbstractSet
java.util.Set
java.util.Collections
java.util.ArrayList
java.lang.InterruptedException
java.lang.ref.Reference$ReferenceHandler
java.lang.ref.Reference$Lock
sun.reflect.ReflectionFactory
java.util.Stack
java.util.Vector
java.util.AbstractList
java.util.AbstractCollection
java.util.RandomAccess
java.util.List
java.util.Collection
java.lang.Iterable
[Ljava.security.cert.Certificate;
java.security.cert.Certificate
sun.reflect.ReflectionFactory$GetReflectionFactoryAction
java.security.PrivilegedAction
java.lang.reflect.ReflectPermission
java.security.AccessController
java.lang.RuntimePermission
java.security.BasicPermission
java.security.Permission
java.security.Guard
[Ljava.lang.StackTraceElement;
[Ljava.lang.ThreadGroup;
[Ljava.lang.Thread$UncaughtExceptionHandler;
java.lang.String$CaseInsensitiveComparator
java.util.Comparator
[Ljava.io.ObjectStreamField;
[Ljava.lang.Comparable;
java.io.ObjectStreamField
[Ljava.lang.OutOfMemoryError;
[Ljava.lang.VirtualMachineError;
[Ljava.lang.Error;
[Ljava.lang.Throwable;
java.lang.ArithmeticException
java.lang.NullPointerException
[Ljava.lang.Class;
[Ljava.io.Serializable;
[Ljava.lang.reflect.GenericDeclaration;
[Ljava.lang.reflect.AnnotatedElement;
[Ljava.lang.reflect.Type;
[Ljava.lang.Object;
java.lang.Long
java.lang.Integer
java.lang.Short
java.lang.Byte
java.lang.Double
java.lang.Float
java.lang.Number
java.lang.Character
java.lang.Boolean
java.nio.Buffer
java.lang.StackTraceElement
java.security.CodeSource
sun.misc.Launcher$ExtClassLoader
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher
java.util.jar.Manifest
java.net.URL
java.net.URLClassLoader
java.io.File
java.io.ByteArrayInputStream
java.io.InputStream
java.io.Closeable
java.lang.AutoCloseable
sun.misc.Unsafe
java.lang.StringBuilder
java.lang.StringBuffer
java.lang.AbstractStringBuilder
java.lang.Appendable
java.lang.invoke.VolatileCallSite
java.lang.invoke.MutableCallSite
java.lang.invoke.ConstantCallSite
java.lang.invoke.CallSite
java.lang.BootstrapMethodError
java.lang.invoke.MethodType
java.lang.invoke.LambdaForm
java.lang.invoke.MethodHandleNatives
java.lang.invoke.MemberName
java.lang.invoke.DirectMethodHandle
java.lang.invoke.MethodHandle
sun.reflect.CallerSensitive
java.lang.annotation.Annotation
sun.reflect.UnsafeStaticFieldAccessorImpl
sun.reflect.UnsafeFieldAccessorImpl
sun.reflect.FieldAccessorImpl
sun.reflect.FieldAccessor
sun.reflect.ConstantPool
sun.reflect.DelegatingClassLoader
sun.reflect.ConstructorAccessorImpl
sun.reflect.ConstructorAccessor
sun.reflect.MethodAccessorImpl
sun.reflect.MethodAccessor
sun.reflect.MagicAccessorImpl
java.lang.reflect.Constructor
java.lang.reflect.Method
java.lang.reflect.Executable
java.lang.reflect.Parameter
java.lang.reflect.Field
java.lang.reflect.Member
java.lang.reflect.AccessibleObject
java.util.Properties
java.util.Hashtable
java.util.Dictionary
java.util.Map
java.lang.ThreadGroup
java.lang.Thread$UncaughtExceptionHandler
java.lang.Thread
java.lang.Runnable
java.lang.ref.ReferenceQueue
java.lang.ref.Finalizer
sun.misc.Cleaner
java.lang.ref.PhantomReference
java.lang.ref.FinalReference
java.lang.ref.WeakReference
java.lang.ref.SoftReference
java.lang.ref.Reference
java.lang.IllegalMonitorStateException
java.lang.StackOverflowError
java.lang.OutOfMemoryError
java.lang.VirtualMachineError
java.lang.ArrayStoreException
java.lang.ClassCastException
java.lang.NoClassDefFoundError
java.lang.LinkageError
java.lang.ClassNotFoundException
java.lang.ReflectiveOperationException
java.security.SecureClassLoader
java.security.AccessControlContext
java.security.ProtectionDomain
java.lang.SecurityManager
java.lang.RuntimeException
java.lang.Exception
java.lang.ThreadDeath
java.lang.Error
java.lang.Throwable
java.lang.System
java.lang.ClassLoader
java.lang.Cloneable
java.lang.Class
java.lang.reflect.Type
java.lang.reflect.GenericDeclaration
java.lang.reflect.AnnotatedElement
java.lang.String
java.lang.CharSequence
java.lang.Comparable
java.io.Serializable
java.lang.Object
[J
[I
[S
[B
[D
[F
[C
[Z
正在加载类:sun/nio/cs/ThreadLocalCoders
****
正在加载类:sun/nio/cs/ThreadLocalCoders$1
****
正在加载类:sun/nio/cs/ThreadLocalCoders$Cache
****
正在加载类:sun/nio/cs/ThreadLocalCoders$2
****
正在加载类:sun/misc/URLClassPath$JarLoader$2
****
正在加载类:java/util/jar/Attributes
****
正在加载类:java/util/jar/Manifest$FastInputStream
****
正在加载类:java/util/jar/Attributes$Name
****
正在加载类:sun/misc/ASCIICaseInsensitiveComparator
****
正在加载类:java/util/jar/JarVerifier
****
正在加载类:java/security/CodeSigner
****
正在加载类:java/util/jar/JarVerifier$3
****
正在加载类:java/io/ByteArrayOutputStream
****
正在加载类:sun/security/util/SignatureFileVerifier
****
正在加载类:sun/security/util/DisabledAlgorithmConstraints
****
正在加载类:sun/security/util/AbstractAlgorithmConstraints
****
正在加载类:java/security/AlgorithmConstraints
****
正在加载类:sun/security/util/AlgorithmDecomposer
****
正在加载类:java/util/regex/Pattern
****
正在加载类:java/util/regex/Pattern$4
****
正在加载类:java/util/regex/Pattern$Node
****
正在加载类:java/util/regex/Pattern$LastNode
****
正在加载类:java/util/regex/Pattern$GroupHead
****
正在加载类:java/util/regex/Pattern$Single
****
正在加载类:java/util/regex/Pattern$BmpCharProperty
****
正在加载类:java/util/regex/Pattern$CharProperty
****
正在加载类:java/util/regex/Pattern$Slice
****
正在加载类:java/util/regex/Pattern$SliceNode
****
正在加载类:java/util/regex/Pattern$Begin
****
正在加载类:java/util/regex/Pattern$First
****
正在加载类:java/util/regex/Pattern$Start
****
正在加载类:java/util/regex/Pattern$TreeInfo
****
正在加载类:java/util/regex/ASCII
****
正在加载类:java/util/regex/Pattern$SliceI
****
正在加载类:java/util/regex/Pattern$BranchConn
****
正在加载类:java/util/regex/Pattern$Branch
****
正在加载类:sun/security/util/AbstractAlgorithmConstraints$1
****
正在加载类:java/security/Security
****
正在加载类:java/security/Security$1
****
正在加载类:java/util/Properties$LineReader
****
正在加载类:java/util/ArrayList$SubList
****
正在加载类:java/util/ArrayList$SubList$1
****
正在加载类:java/util/ListIterator
****
正在加载类:sun/security/util/DisabledAlgorithmConstraints$Constraints
****
正在加载类:java/util/regex/Pattern$BnM
****
正在加载类:java/util/regex/Matcher
****
正在加载类:java/util/regex/MatchResult
****
正在加载类:java/util/Arrays$ArrayList
****
正在加载类:java/util/AbstractList$Itr
****
正在加载类:sun/security/util/DisabledAlgorithmConstraints$DisabledConstraint
****
正在加载类:sun/security/util/DisabledAlgorithmConstraints$Constraint
****
正在加载类:sun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint
****
正在加载类:sun/security/util/DisabledAlgorithmConstraints$Constraint$Operator
****
正在加载类:sun/security/util/DisabledAlgorithmConstraints$1
****
正在加载类:sun/security/util/ManifestEntryVerifier
****
正在加载类:com/intellij/rt/execution/application/AppMainV2$Agent
****
正在加载类:com/intellij/rt/execution/application/AppMainV2
****
正在加载类:com/intellij/rt/execution/application/AppMainV2$1
****
正在加载类:java/lang/reflect/InvocationTargetException
****
正在加载类:java/lang/NoSuchMethodException
****
正在加载类:java/net/Socket
****
正在加载类:java/net/InetSocketAddress
****
正在加载类:java/net/SocketAddress
****
正在加载类:java/net/InetAddress
****
正在加载类:java/net/InetSocketAddress$InetSocketAddressHolder
****
正在加载类:sun/security/action/GetBooleanAction
****
正在加载类:java/net/InetAddress$1
****
正在加载类:java/net/InetAddress$InetAddressHolder
****
正在加载类:java/net/InetAddress$Cache
****
正在加载类:java/net/InetAddress$Cache$Type
****
正在加载类:java/net/InetAddressImplFactory
****
正在加载类:java/net/Inet6AddressImpl
****
正在加载类:java/net/InetAddressImpl
****
正在加载类:java/lang/invoke/MethodHandleImpl
正在加载类:java/net/InetAddress$2
****
正在加载类:sun/net/spi/nameservice/NameService
****
正在加载类:sun/net/util/IPAddressUtil
****
正在加载类:java/net/Inet4Address
****
正在加载类:java/net/SocksSocketImpl
****
正在加载类:java/net/SocksConsts
****
正在加载类:java/net/PlainSocketImpl
****
正在加载类:java/net/AbstractPlainSocketImpl
****
正在加载类:java/net/SocketImpl
****
正在加载类:java/net/SocketOptions
****
****
正在加载类:java/net/AbstractPlainSocketImpl$1
****
正在加载类:java/lang/invoke/MethodHandleImpl$1
****
正在加载类:java/lang/invoke/MethodHandleImpl$2
****
正在加载类:java/net/Inet6Address
****
正在加载类:java/util/function/Function
****
正在加载类:java/lang/invoke/MethodHandleImpl$3
****
正在加载类:java/net/Inet6Address$Inet6AddressHolder
****
正在加载类:java/lang/invoke/MethodHandleImpl$4
****
正在加载类:java/lang/ClassValue
****
正在加载类:java/lang/ClassValue$Entry
****
正在加载类:java/lang/ClassValue$Identity
****
正在加载类:java/lang/ClassValue$Version
****
正在加载类:java/lang/invoke/MemberName$Factory
****
正在加载类:java/lang/invoke/MethodHandleStatics
****
正在加载类:java/lang/invoke/MethodHandleStatics$1
正在加载类:java/net/SocketException
****
正在加载类:java/io/IOException
****
正在加载类:java/net/SocksSocketImpl$3
****
正在加载类:java/net/ProxySelector
****
正在加载类:sun/net/spi/DefaultProxySelector
****
正在加载类:sun/net/spi/DefaultProxySelector$1
****
正在加载类:sun/net/NetProperties
****
正在加载类:sun/net/NetProperties$1
****
正在加载类:java/net/URI
****
****
正在加载类:java/net/URI$Parser
****
正在加载类:sun/net/spi/DefaultProxySelector$NonProxyInfo
****
正在加载类:sun/net/spi/DefaultProxySelector$3
****
正在加载类:java/net/Proxy
****
正在加载类:java/net/Proxy$Type
****
正在加载类:sun/misc/PostVMInitHook
****
正在加载类:java/util/ArrayList$Itr
****
正在加载类:sun/usagetracker/UsageTrackerClient
****
正在加载类:sun/net/NetHooks
****
正在加载类:sun/net/sdp/SdpProvider
****
正在加载类:sun/net/NetHooks$Provider
****
正在加载类:java/net/NetworkInterface
****
正在加载类:java/net/NetworkInterface$1
****
正在加载类:java/util/concurrent/atomic/AtomicBoolean
****
正在加载类:sun/usagetracker/UsageTrackerClient$1
正在加载类:java/net/InterfaceAddress
****
****
正在加载类:java/net/DefaultInterface
****
正在加载类:sun/usagetracker/UsageTrackerClient$4
****
正在加载类:sun/usagetracker/UsageTrackerClient$3
****
正在加载类:java/net/NetworkInterface$2
****
正在加载类:java/io/FileOutputStream$1
****
正在加载类:sun/launcher/LauncherHelper
****
正在加载类:PersonTest
----
正在加载类:java/net/Socket$2
****
正在加载类:java/net/SocketInputStream
****
正在加载类:sun/nio/cs/US_ASCII$Decoder
****
javassist.CtClassType@6f539caf[changed public class PersonTest fields= constructors=javassist.CtConstructor@49097b5d[public PersonTest ()V],  methods=javassist.CtMethod@44a4fe33[public static main ([Ljava/lang/String;)V], ]
javassist.NotFoundException: test(..) is not found in PersonTest
    at javassist.CtClassType.getDeclaredMethod(CtClassType.java:1343)
    at com.agent.MyTransformer.transform(MyTransformer.java:38)
    at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
    at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
正在加载类:sun/launcher/LauncherHelper$FXHelper
****
正在加载类:java/lang/Class$MethodArray
****
正在加载类:java/lang/Void
****
按数字键 1 调用测试方法
正在加载类:java/util/Scanner
****
正在加载类:java/util/regex/Pattern$CharPropertyNames
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$1
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$CharPropertyFactory
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$2
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$5
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$3
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$6
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$CloneableProperty
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$4
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$7
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$8
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$9
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$10
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$11
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$12
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$13
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$14
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$15
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$16
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$17
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$18
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$19
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$20
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$21
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$22
****
正在加载类:java/util/regex/Pattern$CharPropertyNames$23
****
正在加载类:java/util/regex/Pattern$Curly
****
正在加载类:java/util/regex/Pattern$All
****
正在加载类:java/util/regex/Pattern$BitClass
****
正在加载类:java/util/regex/Pattern$1
****
正在加载类:java/util/regex/Pattern$CharProperty$1
****
正在加载类:java/util/regex/Pattern$6
****
正在加载类:java/util/Scanner$1
****
正在加载类:sun/misc/LRUCache
****
正在加载类:java/util/Locale$Category
****
正在加载类:java/util/Locale$1
****
正在加载类:java/text/NumberFormat
****
正在加载类:java/text/Format
****
正在加载类:java/text/spi/NumberFormatProvider
****
正在加载类:java/util/spi/LocaleServiceProvider
****
正在加载类:sun/util/locale/provider/LocaleProviderAdapter
****
正在加载类:sun/util/locale/provider/JRELocaleProviderAdapter
****
正在加载类:sun/util/locale/provider/ResourceBundleBasedAdapter
****
正在加载类:sun/util/locale/provider/SPILocaleProviderAdapter
****
正在加载类:sun/util/locale/provider/AuxLocaleProviderAdapter
****
正在加载类:sun/util/locale/provider/AuxLocaleProviderAdapter$NullProvider
****
正在加载类:sun/util/locale/provider/LocaleProviderAdapter$Type
****
正在加载类:java/util/Collections$UnmodifiableCollection$1
****
正在加载类:sun/util/locale/provider/LocaleProviderAdapter$1
****
正在加载类:sun/util/locale/provider/NumberFormatProviderImpl
****
正在加载类:sun/util/locale/provider/AvailableLanguageTags
****
正在加载类:sun/util/locale/provider/LocaleDataMetaInfo
****
正在加载类:sun/util/locale/provider/JRELocaleProviderAdapter$1
****
正在加载类:sun/util/locale/LanguageTag
****
正在加载类:java/util/Collections$EmptyIterator
****
正在加载类:sun/util/locale/provider/SPILocaleProviderAdapter$1
****
正在加载类:java/util/ServiceLoader
****
正在加载类:java/util/ServiceLoader$LazyIterator
****
正在加载类:java/util/ServiceLoader$1
****
正在加载类:java/util/LinkedHashMap$LinkedEntrySet
****
正在加载类:java/util/LinkedHashMap$LinkedEntryIterator
****
正在加载类:java/util/LinkedHashMap$LinkedHashIterator
****
正在加载类:sun/misc/URLClassPath$2
****
正在加载类:java/lang/ClassLoader$2
****
正在加载类:sun/misc/URLClassPath$1
****
正在加载类:java/net/URLClassLoader$3
****
正在加载类:sun/misc/CompoundEnumeration
****
正在加载类:java/io/FileNotFoundException
****
正在加载类:java/security/PrivilegedActionException
****
正在加载类:java/net/URLClassLoader$3$1
****
正在加载类:java/util/ResourceBundle$Control
****
正在加载类:java/util/ResourceBundle$Control$CandidateListCache
****
正在加载类:java/util/AbstractList$ListItr
****
正在加载类:java/util/Collections$UnmodifiableList$1
****
正在加载类:sun/util/locale/provider/LocaleResources
****
正在加载类:sun/util/resources/LocaleData
****
正在加载类:sun/util/resources/LocaleData$1
****
正在加载类:sun/util/resources/LocaleData$LocaleDataResourceBundleControl
****
正在加载类:java/util/ResourceBundle
****
正在加载类:java/util/ResourceBundle$1
****
正在加载类:java/util/spi/ResourceBundleControlProvider
****
正在加载类:java/util/ResourceBundle$RBClassLoader
****
正在加载类:java/util/ResourceBundle$RBClassLoader$1
****
正在加载类:java/util/ResourceBundle$CacheKey
****
正在加载类:java/util/ResourceBundle$LoaderReference
****
正在加载类:java/util/ResourceBundle$CacheKeyReference
****
正在加载类:java/util/ResourceBundle$SingleFormatControl
****
正在加载类:sun/text/resources/FormatData
****
正在加载类:sun/util/resources/ParallelListResourceBundle
****
正在加载类:java/util/concurrent/atomic/AtomicMarkableReference
****
正在加载类:java/util/concurrent/atomic/AtomicMarkableReference$Pair
****
正在加载类:java/util/ResourceBundle$BundleReference
****
正在加载类:sun/text/resources/en/FormatData_en
****
正在加载类:sun/util/locale/provider/LocaleResources$ResourceReference
****
正在加载类:java/text/DecimalFormatSymbols
****
正在加载类:java/text/spi/DecimalFormatSymbolsProvider
****
正在加载类:sun/util/locale/provider/DecimalFormatSymbolsProviderImpl
****
正在加载类:sun/util/resources/ParallelListResourceBundle$KeySet
****
正在加载类:java/util/Currency
****
正在加载类:java/util/Currency$1
****
正在加载类:java/util/spi/CurrencyNameProvider
****
正在加载类:sun/util/locale/provider/LocaleServiceProviderPool
****
正在加载类:java/text/spi/BreakIteratorProvider
****
正在加载类:java/text/spi/CollatorProvider
****
正在加载类:java/text/spi/DateFormatProvider
****
正在加载类:java/text/spi/DateFormatSymbolsProvider
****
正在加载类:java/util/spi/LocaleNameProvider
****
正在加载类:java/util/spi/TimeZoneNameProvider
****
正在加载类:java/util/spi/CalendarDataProvider
****
正在加载类:sun/util/locale/provider/CurrencyNameProviderImpl
****
正在加载类:java/util/Currency$CurrencyNameGetter
****
正在加载类:sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter
****
正在加载类:sun/util/resources/CurrencyNames
****
正在加载类:sun/util/resources/LocaleNamesBundle
****
正在加载类:sun/util/resources/OpenListResourceBundle
****
正在加载类:java/util/HashMap$KeySet
****
正在加载类:java/text/DecimalFormat
****
正在加载类:java/text/FieldPosition
****
正在加载类:java/text/DigitList
****
正在加载类:java/math/RoundingMode
****
正在加载类:java/util/regex/Pattern$GroupTail
****
正在加载类:java/util/regex/Pattern$Ques
****
正在加载类:java/util/regex/Pattern$Loop
****
正在加载类:java/util/regex/Pattern$Prolog
****
正在加载类:sun/misc/VMSupport
****
正在加载类:java/util/Hashtable$KeySet
****
正在加载类:sun/nio/cs/ISO_8859_1$Encoder
****
正在加载类:sun/nio/cs/Surrogate$Parser
****
正在加载类:sun/nio/cs/Surrogate
****
正在加载类:java/util/Date
****
正在加载类:sun/util/calendar/CalendarSystem
****
正在加载类:sun/util/calendar/Gregorian
****
正在加载类:sun/util/calendar/BaseCalendar
****
正在加载类:sun/util/calendar/AbstractCalendar
****
正在加载类:java/util/TimeZone
****
正在加载类:sun/util/calendar/ZoneInfo
****
正在加载类:sun/util/calendar/ZoneInfoFile
****
正在加载类:sun/util/calendar/ZoneInfoFile$1
****
正在加载类:sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule
****
正在加载类:sun/util/calendar/ZoneInfoFile$Checksum
****
正在加载类:java/util/zip/CRC32
****
正在加载类:java/util/zip/Checksum
****
正在加载类:java/util/TimeZone$1
****
正在加载类:sun/util/calendar/Gregorian$Date
****
正在加载类:sun/util/calendar/BaseCalendar$Date
****
正在加载类:sun/util/calendar/CalendarDate
****
正在加载类:sun/util/calendar/CalendarUtils
****
正在加载类:sun/util/locale/provider/TimeZoneNameUtility
****
正在加载类:sun/util/locale/provider/TimeZoneNameProviderImpl
****
正在加载类:sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter
****
正在加载类:sun/util/resources/TimeZoneNames
****
正在加载类:sun/util/resources/TimeZoneNamesBundle
****
正在加载类:sun/util/resources/en/TimeZoneNames_en
****
正在加载类:java/util/LinkedHashMap$LinkedKeySet
****
1
正在加载类:Person
----
javassist.CtClassType@4d405ef7[changed public class Person fields= constructors=javassist.CtConstructor@6193b845[public Person ()V],  methods=javassist.CtMethod@cbb76d13[public test ()Ljava/lang/String;], ]
获取方法名称:test
 动态插入的打印语句 
执行测试方法
I'm ok

可以看到 java/util/regex/Pattern$Prolog 这之后的加载的类,在命令行是没有打印出来的。为什么intellij 和纯命令行的结果差别这么大呢?

而且这里有一个报错

javassist.CtClassType@6f539caf[changed public class PersonTest fields= constructors=javassist.CtConstructor@49097b5d[public PersonTest ()V],  methods=javassist.CtMethod@44a4fe33[public static main ([Ljava/lang/String;)V], ]
javassist.NotFoundException: test(..) is not found in PersonTest
    at javassist.CtClassType.getDeclaredMethod(CtClassType.java:1343)
    at com.agent.MyTransformer.transform(MyTransformer.java:38)

(2)以动态 attach 的方式运行

也是在命令行中运行的,结果也是跟上面类似

clipboard.png

命令如下:

java PersonTest



javac -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/tools.jar:. AttachAgent.java

java -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/tools.jar:. AttachAgent
阅读 4.4k
1 个回答

最终在原文博主的帮助下,确定了问题所在:我使用gradle方式生成的jar包,只有3KB大小,没有将所需要的依赖javassist包含进去。修改gradle,使得可以将javassist包含进去,然后就没有出现这种问题了。
另外,在-javaagent方式运行的时候,出现这种报错:

正在加载类:PersonTest
javassist.NotFoundException: test(..) is not found in PersonTest
    at javassist.CtClassType.getDeclaredMethod(CtClassType.java:1186)
    at kite.lab.custom.agent.MyTransformer.transform(MyTransformer.java:36)
    at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
    at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)

以attach方式没有这种报错,是因为我改变了它的写法。

if(!className.toLowerCase().contains("person")){
  System.out.println("****");
  return classfileBuffer;
}

当运行PersonTest时候,所以会报错。在Attach方式时候,由于类名中不包含“person”,所以没有问题。

主要原因还是因为gradle不熟悉,打包的结果中,没有包含依赖包。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题