3维网站制作技术,手机客户端网站建设,新闻采编与制作专业简历,学做课件的网站文章目录 一、需求概述二、代码结构三、运行结果四、打包设置1. 一体化可执行包2. 带外部依赖lib的可执行包 五、打包运行1. 源码放送2. 打包执行3. 打包结果 一、需求概述
普通Java工程 docker-show 实现了定时打印docker应用信息#xff0c;现在需要将其打包成可执行Jar部署… 文章目录 一、需求概述二、代码结构三、运行结果四、打包设置1. 一体化可执行包2. 带外部依赖lib的可执行包 五、打包运行1. 源码放送2. 打包执行3. 打包结果 一、需求概述
普通Java工程 docker-show 实现了定时打印docker应用信息现在需要将其打包成可执行Jar部署到服务器端运行。
打包方式分为2种
一体化可执行包带外部依赖lib的可执行包
二、代码结构 三、运行结果
此项目使用了线程池定时打印docker应用名端口信息
四、打包设置
1. 一体化可执行包
pom文件中引入 maven-assembly-plugin插件核心配置 !-- 方式一带dependencies运行包 --pluginartifactIdmaven-assembly-plugin/artifactIdversion3.5.0/versionconfigurationappendAssemblyIdfalse/appendAssemblyIdarchivemanifestmainClasscom.fly.simple.MainRun/mainClass/manifest/archivedescriptorRefs!--将所有外部依赖JAR都加入生成的JAR包--descriptorRefjar-with-dependencies/descriptorRef/descriptorRefs/configurationexecutionsexecution!-- 配置执行器 --idmake-assembly/idphasepackage/phase!-- 绑定到package阶段 --goalsgoalsingle/goal!-- 只运行一次 --/goals/execution/executions/plugin2. 带外部依赖lib的可执行包
pom文件中引入 maven-dependency-plugin、maven-jar-plugin插件核心配置 !-- 方式二外部依赖lib目录运行包 --!-- 将项目依赖包复制到outputDirectory指定的目录下 --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-dependency-plugin/artifactIdversion3.1.2/versionexecutionsexecutionidcopy-dependencies/idphasepackage/phasegoalsgoalcopy-dependencies/goal/goalsconfigurationoutputDirectory${project.build.directory}/lib/outputDirectoryexcludeArtifactIdslombok/excludeArtifactIdsincludeScoperuntime/includeScope!-- 默认为test包含所有依赖 --/configuration/execution/executions/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactIdversion3.2.0/versionconfigurationarchivemanifestaddClasspathtrue/addClasspathclasspathPrefixlib/classpathPrefixmainClasscom.fly.simple.MainRun/mainClass/manifestmanifestEntriesClass-Path.//Class-Path/manifestEntries/archive/configuration/plugin五、打包运行
1. 源码放送
https://gitcode.com/00fly/demo
git clone https://gitcode.com/00fly/demo.git或者使用下面的备份文件恢复成原始的项目代码
如何恢复请移步查阅神奇代码恢复工具
//goto pom-deps.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.fly/groupIdartifactIddocker-show/artifactIdversion0.0.1/versionnamejava-depend/nameurlhttp://maven.apache.org/urlpackagingjar/packagingpropertiesproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingproject.build.sourceEncodingUTF-8/project.build.sourceEncodingjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion2.12.1/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.5/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.12/versionscopeprovided/scope/dependency/dependenciesbuildfinalName${project.artifactId}/finalNamepluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource1.8/sourcetarget1.8/target/configuration/plugin!-- 方式一带dependencies运行包 --pluginartifactIdmaven-assembly-plugin/artifactIdversion3.5.0/versionconfigurationappendAssemblyIdfalse/appendAssemblyIdarchivemanifestmainClasscom.fly.simple.MainRun/mainClass/manifest/archivedescriptorRefs!--将所有外部依赖JAR都加入生成的JAR包--descriptorRefjar-with-dependencies/descriptorRef/descriptorRefs/configurationexecutionsexecution!-- 配置执行器 --idmake-assembly/idphasepackage/phase!-- 绑定到package阶段 --goalsgoalsingle/goal!-- 只运行一次 --/goals/execution/executions/plugin/plugins/build
/project
//goto pom-lib.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.fly/groupIdartifactIddocker-show/artifactIdversion0.0.1/versionnamejava-depend/nameurlhttp://maven.apache.org/urlpackagingjar/packagingpropertiesproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingproject.build.sourceEncodingUTF-8/project.build.sourceEncodingjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion2.12.1/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.5/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.12/versionscopeprovided/scope/dependency/dependenciesbuildfinalName${project.artifactId}/finalNamepluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource1.8/sourcetarget1.8/target/configuration/plugin!-- 方式二外部依赖lib目录运行包 --!-- 将项目依赖包复制到outputDirectory指定的目录下 --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-dependency-plugin/artifactIdversion3.1.2/versionexecutionsexecutionidcopy-dependencies/idphasepackage/phasegoalsgoalcopy-dependencies/goal/goalsconfigurationoutputDirectory${project.build.directory}/lib/outputDirectoryexcludeArtifactIdslombok/excludeArtifactIdsincludeScoperuntime/includeScope!-- 默认为test包含所有依赖 --/configuration/execution/executions/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactIdversion3.2.0/versionconfigurationarchivemanifestaddClasspathtrue/addClasspathclasspathPrefixlib/classpathPrefixmainClasscom.fly.simple.MainRun/mainClass/manifestmanifestEntriesClass-Path.//Class-Path/manifestEntries/archive/configuration/plugin/plugins/build
/project
//goto pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.fly/groupIdartifactIddocker-show/artifactIdversion0.0.1/versionnamejava-depend/nameurlhttp://maven.apache.org/urlpackagingjar/packagingpropertiesproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingproject.build.sourceEncodingUTF-8/project.build.sourceEncodingjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion2.12.1/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.5/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.12/versionscopeprovided/scope/dependency/dependenciesbuildfinalName${project.artifactId}/finalNamepluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource1.8/sourcetarget1.8/target/configuration/plugin!-- 方式一带dependencies运行包 --pluginartifactIdmaven-assembly-plugin/artifactIdversion3.5.0/versionconfigurationappendAssemblyIdtrue/appendAssemblyIdarchivemanifestmainClasscom.fly.simple.MainRun/mainClass/manifest/archivedescriptorRefs!--将所有外部依赖JAR都加入生成的JAR包--descriptorRefjar-with-dependencies/descriptorRef/descriptorRefs/configurationexecutionsexecution!-- 配置执行器 --idmake-assembly/idphasepackage/phase!-- 绑定到package阶段 --goalsgoalsingle/goal!-- 只运行一次 --/goals/execution/executions/plugin!-- 方式二外部依赖lib目录运行包 --!-- 将项目依赖包复制到outputDirectory指定的目录下 --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-dependency-plugin/artifactIdversion3.1.2/versionexecutionsexecutionidcopy-dependencies/idphasepackage/phasegoalsgoalcopy-dependencies/goal/goalsconfigurationoutputDirectory${project.build.directory}/lib/outputDirectoryexcludeArtifactIdslombok/excludeArtifactIdsincludeScoperuntime/includeScope!-- 默认为test包含所有依赖 --/configuration/execution/executions/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactIdversion3.2.0/versionconfigurationarchivemanifestaddClasspathtrue/addClasspathclasspathPrefixlib/classpathPrefixmainClasscom.fly.simple.MainRun/mainClass/manifestmanifestEntriesClass-Path.//Class-Path/manifestEntries/archive/configuration/plugin/plugins/build
/project
//goto src\main\java\com\fly\simple\Executor.java
package com.fly.simple;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.SystemUtils;import lombok.extern.slf4j.Slf4j;Slf4j
public class Executor
{private static String DOCKER_PS_CMD docker ps --format \{{.Names}} {{.Ports}}\;/*** execute命令* * param command* throws IOException* see [类、类#方法、类#成员]*/public static ListString execute(String command)throws IOException{ListString resultList new ArrayList();String[] cmd SystemUtils.IS_OS_WINDOWS ? new String[] {cmd, /c, command} : new String[] {/bin/sh, -c, command};Process ps Runtime.getRuntime().exec(cmd);try (InputStream in ps.getInputStream(); BufferedReader br new BufferedReader(new InputStreamReader(in))){String line;while ((line br.readLine()) ! null){resultList.add(line);}}return resultList;}/*** 获取docker相关信息* * throws IOException*/Deprecatedpublic static void printPorts1()throws IOException{MapString, SetString map new TreeMap();for (String line : execute(DOCKER_PS_CMD)){log.info({}, line);String name StringUtils.substringBefore(line, );SetString ports Stream.of(StringUtils.substringAfter(line, ).split(,)).map(p - StringUtils.substringBetween(p, :, -)).filter(StringUtils::isNotBlank).map(p - p.replace(:, )).sorted().collect(Collectors.toSet());map.put(name, ports);}log.info(######## {}, map);}/*** 获取docker相关信息* * throws IOException*/public static void printPorts()throws IOException{MapString, SetString map new TreeMap();execute(DOCKER_PS_CMD).stream().map(line - Collections.singletonMap(StringUtils.substringBefore(line, ),Stream.of(StringUtils.substringAfter(line, ).split(,)).map(p - StringUtils.substringBetween(p, :, -)).filter(StringUtils::isNotBlank).map(p - p.replace(:, )).sorted().collect(Collectors.toSet()))).forEach(it - map.putAll(it));log.info(######## {}, map);}
}
//goto src\main\java\com\fly\simple\MainRun.java
package com.fly.simple;import java.io.IOException;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;public class MainRun
{/*** 线程池保证程序一直运行* * param args*/public static void main(String[] args){ScheduledExecutorService service new ScheduledThreadPoolExecutor(1);service.scheduleAtFixedRate(() - {try{Executor.printPorts();}catch (IOException e){e.printStackTrace();}}, 2, 10, TimeUnit.SECONDS);}
}
//goto src\main\resources\log4j2.xml
?xml version1.0 encodingUTF-8?
configuration statusoff monitorInterval0appendersconsole nameConsole targetsystem_outpatternLayout pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n //console/appendersloggersroot levelINFOappender-ref refConsole //root/loggers
/configuration2. 打包执行
#完整打包
mvn clean package#一体化可执行包
mvn clean package -f pom-deps.xml#带外部依赖lib的可执行包
mvn clean package -f pom-lib.xml3. 打包结果 有任何问题和建议都可以向我提问讨论,大家一起进步谢谢!
-over-