0.jar依赖项文件说明

可执行文件样例
- class-path是依赖包 用空格隔开
- 指定main函数入口
- 最后一行一定要回车,空一行,不然无法识别最后一行的配置
Manifest-Version: 1.0
Class-Path: lib/commons-cli-1.4.jar lib/javassist-3.30.2-GA.jar lib/as
m-9.7.jar lib/asm-util-9.7.jar lib/asm-tree-9.7.jar lib/asm-analysis-
9.7.jar lib/asm-commons-9.7.jar lib/byte-buddy-1.14.18.jar lib/byte-b
uddy-agent-1.14.18.jar lib/commons-codec-1.17.1.jar lib/commons-lang3
-3.16.0.jar
Build-Jdk-Spec: 1.8
Created-By: Maven JAR Plugin 3.3.0
Main-Class: com.soap.agent.vm.MyAgentVMMain
agent文件样例
- Premain-Class配置agent的入口函数
- 最后一行一定要回车,空一行,不然无法识别最后一行的配置
Manifest-Version: 1.0
Premain-Class: com.soap.agent.BuddyAgent
Agent-Class: com.soap.agent.BuddyAgent
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Build-Jdk-Spec: 1.8
Created-By: Maven Jar Plugin 3.2.0
1.依赖项jar单独打包
- 插件maven-dependency-plugin
- ${project.build.directory} 是pom的当前路径。
- 如果有module在父目录执行pom时是父目录路径,在module执行是module路径
- 这个打包会把依赖的包放到当前target的lib目录中
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
2.jar包的两种方式
1.依赖项class打包方式一
- 插件maven-assembly-plugin
- 也可以指定main函数入口
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>
com.soap.agent.vm.MyAgentVMMain
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
2.依赖项class打包方式二
- 插件maven-shade-plugin
- 单独的maven-jar-plugin 没有依赖项
- 这个是把依赖依赖项的class打进去
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
3.依赖项lib文件的方式
- 插件maven-jar-plugin
- 制定了依赖的lib路径
- 指定main入口函数
- 可以配合maven-dependency-plugin 或者 maven-shade-plugin 使用
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.soap.agent.vm.MyAgentVMMain</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
- jar包直接输出在指定的目录中
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!-- 指定打包的jar包输出路径 -->
<outputDirectory>D:\test</outputDirectory>
<!--不打入jar包的文件类型或者路径 -->
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
<exclude>**/*.yml</exclude>
<exclude>static/**</exclude>
<exclude>templates/**</exclude>
</excludes>
</configuration>
</plugin>
3.agent的jar打包两种方式同上
- maven-jar-plugin方式打agent包
- 指定一些agent的属性
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
</manifest>
<manifestEntries>
<Premain-Class>com.soap.agent.BuddyAgent</Premain-Class>
<Agent-Class>com.soap.agent.BuddyAgent</Agent-Class>
<Can-Redefine-Classes>true</Can-Redefine-Classes>
<Can-Retransform-Classes>true</Can-Retransform-Classes>
</manifestEntries>
</archive>
</configuration>
</plugin>
- maven-assembly-plugin方式打agent包
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<goals>
<goal>attached</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
6.资源文件复制
- 插件maven-resources-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>
${project.build.directory}/target/lib
</outputDirectory>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.jar</exclude>
</excludes>
</resource>
<resource>
<directory>target</directory>
</resource>
<overwrite>true</overwrite>
</configuration>
</execution>
</executions>
</plugin>
7.modules的jar包复制到指定目录
- maven-antrun-plugin复制文件
- 文件过滤 注意路径在根目录下运行pom会把module/target下的jar包复制过去
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<configuration>
<target>
<echo message="*******************install*******************${project.build.directory} ${basedir}/target" />
<copy todir="${basedir}/../target/" overwrite="true">
<fileset dir="${project.build.directory}"
erroronmissingdir="false">
<include name="*.jar" />
</fileset>
</copy>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</executions>
</plugin>