爲什麼開發這個小項目
1.之前寫了篇博客:Spring Boot Linux 部署腳本,
2.但是在實際開發中,需要手動修改其中的配置,有三處需要修改。
3.需要用chmod +x 賦予可執行權限
4.需要建立相關目錄結構
綜上所述,主要研究了 java打包tar,java賦予文件可執行權限相關內容
開發出了Linux Spring Boot Startup Generator from Github
在線使用方式 http://www.boommanpro.cn:8088/downloadTarGz?projectName=xxx
將後綴projectName參數值修改爲你自己想要的即可
Release版本
在Release頁面下載 以 jar 結尾的文件
本地部署: java -jar linux-spring-boot-startup-generator.jar
運行即可
部署完成後–>點擊本地測試地址即可下載
linux部署
在Release頁面下載 以 tar.gz結尾的文件
tar -zvxf linux-spring-boot-startup-generator.tar.gz
在目錄中運行./startup
即可
項目核心源碼分析
1.模板框架採用Thymeleaf
/**
* @author <a href="mailto:[email protected]">BoomManPro</a>
* @date 2019/6/5 16:21
* @created by BoomManPro
*/
public enum ThymeLeafConfig {
/**
* Thymeleaf默認配置
*/
INSTANCE;
private TemplateEngine templateEngine;
private static final String DEFAULT_PREFIX = "/templates/";
ThymeLeafConfig() {
//因讀取的是Resource的文件 需要是ClassLoaderTemplateResolver
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix(DEFAULT_PREFIX);
templateResolver.setTemplateMode(TemplateMode.TEXT);
templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
}
public static TemplateEngine getTemplateEngine() {
return INSTANCE.templateEngine;
}
}
2.tar壓縮後的文件解壓具有可執行權限
/**
* @author <a href="mailto:[email protected]">BoomManPro</a>
* @date 2019/6/5 16:21
* @created by BoomManPro
*/
@Slf4j
public class GzipUtil {
public static InputStream pack(GeneratorFile[] generatorFiles) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
TarArchiveOutputStream os = new TarArchiveOutputStream(out);
try {
for (GeneratorFile generatorFile : generatorFiles) {
TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(generatorFile.getFileName());
if (generatorFile.isExecutable()) {
// = (octal) 0100755
tarArchiveEntry.setMode(33261);
}
byte[] bytes = new byte[]{};
if (StringUtils.notBlank(generatorFile.getContent())) {
bytes = generatorFile.getContent().getBytes();
tarArchiveEntry.setSize(bytes.length);
}
os.putArchiveEntry(tarArchiveEntry);
IOUtils.copy(new ByteArrayInputStream(bytes), os);
os.closeArchiveEntry();
}
} catch (IOException e) {
log.error("Exception:", e);
} finally {
try {
os.flush();
os.close();
} catch (IOException e) {
log.error("os Exception:", e);
}
}
return IoConvertUtil.parse(out);
}
}
可執行: // = (octal) 0100755
tarArchiveEntry.setMode(33261);
涉及到進制轉換
寫在最後
如果當前項目幫助到了你,希望能夠給個start哈,感激!!