maven打包spring项目

常用的Maven命令如下

命令   说明
mvn clean    清理Maven 项目。会删除目标路径(一般是target目录)Maven生成的打包文件,编译文件。
mvn package    打包Maven项目,会生成jar 或者war文件。
mvn test    执行test目录下的测试用例。
mvn deploy    发布依赖到远端
mvn site    生成项目相关的信息
mvn archetype创建Maven 项目
mvn tomcat:run 运行在Tomcat容器
mvn install    安装依赖

jar包

打包到本地:

mvn clean install -Dmaven.test.skip=true

打包到远程仓库:

 mvn clean deplay -Dmaven.test.skip=true

说明:

clean: 是清除之前的jar包,

install:是打包到本地,

deploy:是打包到远程仓库

-Dmaven.test.skip=true :是忽略测试代码;

war包

mvn clean package -Dmaven.test.skip=true

maven的spring boot 打包分离依赖及配置文件

<!--省略 其他配置 --><!--参数配置--><properties><package.output.basedir>${project.build.directory}/${project.artifactId}-${project.version}</package.output.basedir><output.dependence.file.path>lib/</output.dependence.file.path><output.resource.file.path>config/</output.resource.file.path><output.shell.file.path>bin/</output.shell.file.path></properties><!--打包配置配置--><build><!-- 打包名称 如果需要包含时间戳,需要加入时间戳插件 --><finalName>${project.artifactId}-${project.version}</finalName><!--打包加GMT+8时间插件(默认是UTC时间少8小时)--><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>buildnumber-maven-plugin</artifactId><version>1.4</version><configuration><timestampFormat>yyyyMMddHHmmss</timestampFormat></configuration><executions><execution><goals><goal>create-timestamp</goal></goals></execution></executions><inherited>false</inherited></plugin><!--移除配置文件将其不打包进jar包中,并可以将打包后的jar包输出到指定路径 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><!-- 剔除配置文件或目录:注意从编译结果目录开始算目录结构excludes\includes 是根据编译后的classes这个路径计算的--><excludes><!-- 剔除指定后缀配置文件 --><exclude>*.properties</exclude><exclude>*.yml</exclude><!-- 剔除指定目录 --><!-- <exclude>/static/**</exclude>--></excludes><archive><manifest><addClasspath>true</addClasspath><!-- MANIFEST.MF 中 Class-Path 各个依赖加入前缀 --><!--lib文件夹内容,需要 maven-dependency-plugin插件补充 (依赖包剥离位置)--><classpathPrefix>${output.dependence.file.path}</classpathPrefix><!-- jar包不包含唯一版本标识 --><useUniqueVersions>false</useUniqueVersions><!--指定入口类 --><mainClass>com.zhong.pacakge.springpacakage.PackageSpringPlugsApplication</mainClass></manifest><manifestEntries><!--MANIFEST.MF 中 Class-Path 加入自定义路径,多个路径用空格隔开 --><!--此处config文件夹的内容,需要maven-resources-plugin插件补充上 (配置文件剥离位置)--><Class-Path>./${output.resource.file.path}</Class-Path></manifestEntries></archive><!--输出目录 不指定则输出到target下--><outputDirectory>${package.output.basedir}//${output.dependence.file.path}</outputDirectory></configuration></plugin><!-- 将依赖包导出到指定文件夹 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><!--依赖包的输出路径--><outputDirectory>${package.output.basedir}/${output.dependence.file.path}</outputDirectory></configuration></execution></executions></plugin><!-- 将需要复制的文件复制到指定路径(例:将配置文件提取到指定路径) --><plugin><artifactId>maven-resources-plugin</artifactId><executions><!-- 复制配置文件 --><execution><id>resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><!-- 复制哪些目录下的哪些文件到指定目录 --><resources><resource><directory>src/main/resources</directory><!-- 不配置excludes\includes默认就是复制指定目录的所有文件 --><includes><include>*.properties</include><include>*.yml</include><include>*/*.properties</include></includes></resource></resources><outputDirectory>${package.output.basedir}/${output.resource.file.path}</outputDirectory></configuration></execution><!-- 启动类文件 位置--><execution><id>shell</id><phase>package</phase><goals><goal>resources</goal></goals><configuration><!-- 复制哪些目录下的哪些文件到指定目录 --><resources><resource><directory>src/bin</directory><!-- 不配置excludes\includes默认就是复制指定目录的所有文件 --><includes><include>*.sh</include><include>*.bat</include></includes></resource></resources><outputDirectory>${package.output.basedir}/${output.shell.file.path}</outputDirectory></configuration></execution></executions></plugin><!-- spring-boot-maven-plugin可以不使用,可当做一般jar包来运行,可统一包内文件结构- --><!--<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration>&lt;!&ndash;重写包含依赖,包含不存在的依赖,jar里没有pom里的依赖 &ndash;&gt;<includes><include><groupId>non-exists</groupId><artifactId>non-exists</artifactId></include></includes><outputDirectory>${package.output.basedir}//${output.dependence.file.path}</outputDirectory></configuration><executions><execution><goals><goal>repackage</goal></goals><configuration>&lt;!&ndash;配置jar包特殊标识 配置后,保留原文件,生成新文件 *-run.jar &ndash;&gt;&lt;!&ndash;配置jar包特殊标识 不配置,原文件命名为 *.jar.original,生成新文件 *.jar &ndash;&gt;&lt;!&ndash;<classifier>run</classifier> &ndash;&gt;</configuration></execution></executions></plugin>--><!--maven打包时,跳过测试--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip></configuration></plugin><!-- 指定多个源代码目录、多个资源文件目录 --><plugin><groupId>org.codehaus.mojo</groupId><artifactId>build-helper-maven-plugin</artifactId><version>1.8</version><executions><execution><id>add-source</id><phase>generate-sources</phase><goals><goal>add-source</goal></goals><configuration><sources><source>src/main/java</source><source>src/main/library</source></sources></configuration></execution></executions></plugin><!-- 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>

结果如下:

maven-assembly-plugin进行配置分离打包

assembly.xml配置参考官网:

Apache Maven Assembly Plugin – Assembly

 assembly.xml配置文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<assembly><!-- 可自定义,这里指定的是项目环境 --><!-- xxx.tar.gz  --><id>assembly</id><!-- 打包的类型,如果有N个,将会打N个类型的包 --><formats><format>tar.gz</format><format>zip</format></formats><!--压缩包是否包含 基于项目 基本目录的存档--><includeBaseDirectory>true</includeBaseDirectory><!--文件设置,参考:https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html --><fileSets><!-- 配置文件打包-打包至config目录下 fileSet 可以多个--><fileSet><!--目标目录,会处理目录里面的所有文件--><directory>${project.basedir}/src/main/resources/</directory><!--打包后的目标文件夹--><outputDirectory>config</outputDirectory><!--指定打包的文件--><includes><include>*.xml</include><include>*.properties</include><include>common/*.properties</include></includes><!--排除的文件按--><!-- <excludes><exclude></exclude></excludes>--><!--目录权限:用户具有读/写/执行权限--><directoryMode>0755</directoryMode><!--文件权限:用户具有读/写/执行权限--><fileMode>0755</fileMode><!--脚本文件的编码问题在这里,要改为unix.如果是在windows上面编码,会出现dos编写问题--><lineEnding>unix</lineEnding></fileSet><!--项目自己创建并依赖的jar--><!-- <fileSet><directory>../package-common/target</directory><outputDirectory>jar</outputDirectory><includes><include>*.jar</include></includes></fileSet>--><!-- 启动文件目录 --><fileSet><directory>${basedir}/src/bin</directory><outputDirectory>bin</outputDirectory><fileMode>0755</fileMode><includes><include>**.sh</include><include>**.bat</include></includes></fileSet></fileSets><files><!--包含打包后的jar文件,可以不加入<dependencySet>指定的 <outputDirectory/>,默认打包的目录--><file><source>${project.build.directory}/${project.build.finalName}.jar</source></file><!--这种方式也可以进行文件处理,但是针对单文件--><!-- <file><source>${project.basedir}/src/main/resources/script/start.sh</source><fileMode>0755</fileMode><lineEnding>unix</lineEnding></file>--></files><dependencySets><dependencySet><!--是否把本项目添加到依赖文件夹下:--><useProjectArtifact>false</useProjectArtifact><!-- 将项目所有依赖包拷贝到发布包的lib目录下 :--><outputDirectory>lib</outputDirectory><!-- 符合runtime作用范围的依赖会被打包进去: --><scope>runtime</scope><!-- 这个是为了解决lib下同一个jar包可能有多个SNAPSHOT快照版的问题,比如后面加了不同的时间戳--><outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping><fileMode>0755</fileMode><excludes><exclude>${project.groupId}:${project.artifactId}</exclude></excludes></dependencySet><!--<dependencySet>&lt;!&ndash; 这个是为了解决lib下同一个jar包可能有多个SNAPSHOT快照版的问题,比如后面加了不同的时间戳&ndash;&gt;<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping><outputDirectory>boot</outputDirectory><fileMode>0755</fileMode><includes><include>${project.groupId}:${project.artifactId}</include></includes></dependencySet>--></dependencySets>
</assembly>

 项目的pom.xml的build配置

<build><!-- 打包后的启动jar名称 --><!-- <finalName>${project.groupId}</finalName>--><plugins><!-- 用于排除jar中依赖包 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><includes><!-- 项目启动jar包中排除依赖包 --><include><groupId>non-exists</groupId><artifactId>non-exists</artifactId></include></includes></configuration></plugin><!-- maven编译 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><!-- 不同版本需要制定具体的版本进行编译 --><source>${java.version}</source><target>${java.version}</target></configuration></plugin><!-- 打包时跳过测试 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><skipTests>true</skipTests></configuration></plugin><!-- 打包插件 --><plugin><artifactId>maven-assembly-plugin</artifactId><version>3.1.0</version><configuration><!--文件夹名称, 就是打包后里面的文件夹名称--><finalName>${project.build.finalName}</finalName><!--指定压缩包的输出路径--><outputDirectory>${project.basedir}/target/package</outputDirectory><descriptors><!--assembly.xml配置位置--><descriptor>src/main/resources/assembly/assembly.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><!-- 绑定到package生命周期阶段 --><phase>package</phase><goals><!-- 只运行一次 --><goal>single</goal></goals></execution></executions></plugin></plugins></build>

使用idea的install功能或者执行命令 mvn package assembly:single

结果如下:

其他assembly.xml示例:将所有jar打到lib中

<?xml version="1.0" encoding="UTF-8"?>
<assembly><!-- 可自定义,这里指定的是项目环境 --><!-- xxx.tar.gz  --><id>assembly</id><!-- 打包的类型,如果有N个,将会打N个类型的包 --><formats><format>tar.gz</format><format>zip</format></formats><!--压缩包是否包含 基于项目 基本目录的存档--><includeBaseDirectory>true</includeBaseDirectory><!--文件设置,参考:https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html --><fileSets><!-- 配置文件打包-打包至config目录下 fileSet 可以多个--><fileSet><!--目标目录,会处理目录里面的所有文件--><directory>${project.basedir}/src/main/resources/</directory><!--打包后的目标文件夹--><outputDirectory>config</outputDirectory><!--指定打包的文件--><includes><include>*.xml</include><include>*.properties</include><include>common/*.properties</include></includes><!--排除的文件按--><!-- <excludes><exclude></exclude></excludes>--><!--目录权限:用户具有读/写/执行权限--><directoryMode>0755</directoryMode><!--文件权限:用户具有读/写/执行权限--><fileMode>0755</fileMode><!--脚本文件的编码问题在这里,要改为unix.如果是在windows上面编码,会出现dos编写问题--><lineEnding>unix</lineEnding></fileSet><!--项目自己创建并依赖的jar--><!-- <fileSet><directory>../package-common/target</directory><outputDirectory>jar</outputDirectory><includes><include>*.jar</include></includes></fileSet>--><!-- 启动文件目录 --><fileSet><directory>${basedir}/src/bin</directory><outputDirectory>bin</outputDirectory><fileMode>0777</fileMode><includes><include>**.sh</include><include>**.bat</include></includes></fileSet></fileSets><files><!--包含打包后的jar文件,可以不加入<dependencySet>指定的 <outputDirectory/>,默认打包的目录--><!--<file><source>${project.build.directory}/${project.build.finalName}.jar</source></file>--><!--这种方式也可以进行文件处理,但是针对单文件--><!-- <file><source>${project.basedir}/src/main/resources/script/start.sh</source><fileMode>0755</fileMode><lineEnding>unix</lineEnding></file>--></files><dependencySets><dependencySet><!--是否把本项目添加到依赖文件夹下:--><useProjectArtifact>true</useProjectArtifact><!-- 将项目所有依赖包拷贝到发布包的lib目录下 :--><outputDirectory>lib</outputDirectory><!-- 符合runtime作用范围的依赖会被打包进去: --><scope>runtime</scope><!-- 这个是为了解决lib下同一个jar包可能有多个SNAPSHOT快照版的问题,比如后面加了不同的时间戳--><outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping><fileMode>0777</fileMode><!--排除指定的文件,不放到lib文件夹--><!--<excludes><exclude>${project.groupId}:${project.artifactId}</exclude></excludes>--></dependencySet><!--<dependencySet>&lt;!&ndash; 这个是为了解决lib下同一个jar包可能有多个SNAPSHOT快照版的问题,比如后面加了不同的时间戳&ndash;&gt;<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping><outputDirectory>boot</outputDirectory><fileMode>0755</fileMode><includes><include>${project.groupId}:${project.artifactId}</include></includes></dependencySet>--></dependencySets>
</assembly>

结果如图:

 附上linux的执行脚本:

#!/bin/bash
# you can run script "sed -i 's/\r$//' start.sh" to format the fileSERVER_NAME=package-assembly-demo#找到当前文件路径
cd `dirname $0`
#上册目录
cd ..
DEPLOY_DIR=`pwd`
MAIN_CLASS_NANE=PackageAssemblyApplication
MAIN_CLASS_PATH=com.zhong.pacakge.assemblydemo.PackageAssemblyApplication
LOGS_DIR=${DEPLOY_DIR}/logs
STDOUT_LOG_FILE=${LOGS_DIR}/stdout.log#日志文件路径
if [ ! -d ${LOGS_DIR} ]; thenmkdir ${LOGS_DIR}
fi
#日志文件权限
chmod -R 777 ${LOGS_DIR}PIDS=`ps -ef | grep java | grep "$MAIN_CLASS_NANE" | awk '{print $2}'`
if [ -n "$PIDS" ]; thenecho "ERROR: The $SERVER_NAME already started!"echo "PID: $PIDS"exit 1
fi#-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10101
CLASS_PATH=.:${DEPLOY_DIR}/config:${DEPLOY_DIR}/lib/*
JAVA_OPTS=" -server -Xmx1g -Xms1g -Xmn512m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "echo "Starting the $SERVER_NAME ..."nohup java ${JAVA_OPTS} -classpath ${CLASS_PATH} ${MAIN_CLASS_PATH} > ${STDOUT_LOG_FILE} 2>&1 &
sleep 5
if [ -n "$PIDS" ]; thenecho "$SERVER_NAME started PID: $PIDS"exit 1
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/662638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年超声波清洗机排行榜,实测五款超声波清洗机,哪款比较强?

相信大家在选购超声波清洗机时&#xff0c;会发现市面上有非常多的超声波清洗机品牌&#xff0c;会非常纠结到底哪款比较好用&#xff0c;而小编选购超声波清洗机时更多时候会比较在意的是便捷度、清水槽容量、噪音等方便的一个参数值&#xff0c;了解清楚各个参数后再选择超声…

02.PostgreSQL运算符

1. 算术运算符 算术运算符 描述 示例 + 加法运算符 SELECT A+B - 减法运算符 SELECT A-B * 乘法运算符 SELECT A*B / 除法运算符 SELECT A/B % 取余运算符 SELECT A%B 1.1 加法与减法操作符 SELECT 100,100+11,100-11,100+23.0,100-23.0 运算结果 由此得出结论: 一个整数加上…

测试ASP.NET Core项目调用EasyCaching的基本用法(Redis)

EasyCaching中的包EasyCaching.Redis和EasyCaching.CSRedis都支持集成Redis实现缓存&#xff0c;前者基于StackExchange.Redis&#xff0c;而后者基于CSRedisCore&#xff0c;本文学习使用EasyCaching.Redis包连接redis服务实现缓存的基本用法。   新建WebApi项目&#xff0c…

体育馆运动场地预定小程序的独特优势与用户体验

随着人们健康意识的提高&#xff0c;体育馆成为了大家进行锻炼和运动的重要场所。为了更好地满足用户的需求&#xff0c;体育馆需要开发一款预定场地的小程序&#xff0c;为用户提供便捷、高效的预定服务。本文将介绍如何使用乔拓云平台开发体育馆运动场地预定小程序&#xff0…

#10外部网页跳转vue3+SpringMVC解码GBK编码的参数

目录 1、背景 2、失败尝试之iconv-lite 2.1、安装和使用 2.2、遇到的问题 2.3、解决方案(vite-plugin-node-polyfills) 2.4、测试 3、成功尝试 3.1、前端参数读取方式 3.2、后端解码 1、背景 外部jsp页面中编码方式为GBK&#xff0c;跳转到vue页面时如果使用decodeURI…

vue不同环境配置不同打包命令

这个需求非常普遍&#xff0c;通常情况我们在开发的时候一般会有三个环境&#xff1a;开发环境、测试环境、生产环境&#xff0c;我们一步步来看下。 vue环境变量是什么&#xff1f; 指的是在不同地方&#xff08;开发环境、测试环境、生产环境&#xff09;&#xff0c;变量就…

混合攻击流量对系统安全性的综合评估

很多针对安全设备的测试仅仅针对安全设备本身的防护&#xff0c;比如防御的漏洞攻击行为、恶意代码是否足够多&#xff0c;能否抵御大流量的L23层DDoS或者应用层的DDoS攻击&#xff0c;却没有考虑是否防御攻击时&#xff0c;一并阻止了正常的业务流量。以下图为例&#xff0c;当…

Spring-mvc、Spring-boot中如何在调用同类方法时触发AOP

1. 问题描述 Spring-mvc和Spring-boot中aop可以实现代理的功能&#xff0c;我们可以借此实现事务和日志记录或者限流等多种操作。但是&#xff0c;如果你在一个方法中调用其同类下的其他方法的时候不会触发AOP。本文主要说明其原因及解决办法和实现原理。 2. 原因 AIOP的本质是…

从零开始学Linux之gcc链接

目录 创建静态库并使用 创建动态库(共享库)并使用 链接&#xff1a;将.o目标文件链接起来生成一个可执行程序文件&#xff0c;可分为静态链接和动态链接 静态链接&#xff1a;链接器会找出程序所需的函数&#xff0c;然后将它们拷贝到执行文件&#xff0c;由于这种拷贝是完整…

vue3前端开发,element-plus前端框架探秘:scope对象

vue3前端开发&#xff0c;element-plus前端框架探秘:scope对象&#xff01;我们经常需要对当前行的数据进行操作&#xff0c;比如增加&#xff0c;删除&#xff0c;编辑等&#xff0c;为此我们需要传递当前行所对应的唯一主键,通常情况下&#xff0c;当前行对应的业务主键是id属…

麒麟系统—— openKylin 安装 Maven

麒麟系统—— openKylin 安装 Maven 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。2. 确保 java 已经安装完毕 二、下载Maven三、解压 Maven 与环境配置解压配置环境变量验证 最终&#xff1a;介绍配置的其他参数使用 本文将分享如何在麒麟操作系统 openKylin 上安装…

一些大语言模型(LLM)相关的开源项目

一些大语言模型&#xff08;LLM&#xff09;相关的开源项目 更多文章访问: https://www.cyisme.top 因为站内限制问题&#xff0c;有些图片无法显示&#xff0c;导致阅读体验较差&#xff0c;可以访问原文&#xff1a;《一些大语言模型&#xff08;LLM&#xff09;相关的开源项…

Json序列化和反序列化 笔记

跟着施磊老师学C 下载&#xff1a;GitHub - nlohmann/json: JSON for Modern C 在single_include/nlohmann里头有一个json.hpp&#xff0c;把它放到我们的项目中就可以了 #include "json.hpp" using json nlohmann::json;#include <iostream> #include <…

Unity_使用Shader实现玻璃和镜面效果

效果图如下&#xff1a; 玻璃效果图 镜面效果图 Step1 搭建场景→镜子使用Quad代替&#xff0c;放置在需要反射的墙面→创建新的材质和Shader Step2 墙壁外创建Camera&#xff0c;用来渲染物体后方的视图→创建RenderTexture&#xff0c;赋于该相机 Step3 Shader的编写如下…

PyTorch][chapter 13[李宏毅深度学习][Semi-supervised Linear Methods-2]

前言&#xff1a; 接上篇CSDN 这里面重点讲下面4个方面 目录&#xff1a; PCA-Another Point of view&#xff08;SVD&#xff09; PCA 和 AutoEncoder 的关系 PCA 的缺点 PCA Python 例子 一 PCA-Another Point of view 以手写数字7的图像为例&#xff0c;它由不…

RabbitMQ控制台的基本使用

启动RabbitMQ后&#xff0c;浏览器 http://localhost:15672 打开RabbitMQ的控制台页面后&#xff0c;登录默认账户guest。 一. 添加队列 控制台选择队列&#xff0c;然后选择添加队列&#xff0c;队列类型默认经典类型&#xff0c;然后输入队列名称&#xff0c;最后添加队列。…

百度输入法往选字框里强塞广告

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 国内几乎100%的输入法都有广告&#xff0c;只是你们没发现而已&#xff01;&#xff01;&#xff01; 百度输入法居然在输入法键盘上推送广告&#xff0c;近日&#xff0c;博主阑夕 表示&#xff0c;V2EX论坛上有…

2024年美国大学生数学建模竞赛F题思路分析与数据

题目 非法野生动物贸易对环境造成了负面影响&#xff0c;并威胁全球生物多样性。据估计&#xff0c;其涉及高达265亿美元的年交易额&#xff0c;被认为是全球所有非法交易中的第四大。[1] 你需要开发一个基于数据驱动的5年项目&#xff0c;旨在显著减少非法野生动物贸易。你的…

PFA氟气吸收装装置耐强酸PFA气体洗涤装置本底纯净

PFA氢气吸收装置在PFA尾气处理中扮演着重要的角色。PFA&#xff08;可溶性聚四氟乙烯&#xff09;是一种聚合物材料&#xff0c;具有良好的化学惰性和耐腐蚀性。在半导体工业过程中&#xff0c;PFA尾气中可能含有氢气等有害气体&#xff0c;需要进行处理以确保环境安全和合规性…

深度解析ScheduledThreadPoolExecutor源码之DelayedWorkQueue

文章目录 引言一、什么是二叉堆&#xff1f;1.1什么是最大堆、最小堆&#xff1f;1.2堆的基本操作1.2.1插入节点元素1.2.2删除节点元素1.2.3构建二叉堆 1.3堆特性总结 二、DelayedWorkQueue源码解析2.1 DelayedWorkQueue参数解析2.2 DelayedWorkQueue方法解析 总结 引言 该系列…