热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于java:使用-Java-和-Maven-JBake-生成静态网站

咱们迁徙了整个www.optaplanner.org网站(1399个文件)以应用Java和Maven,而不是Ruby和Rake进行构建。从外表上看,什么都没有扭转。但在源代码中,对于咱们的Java开发人员团队来说,它是一个游戏规则扭转者。

应用 JBake(“mvn generate-resources”)构建您的动态网站或博客。应用布局、宏和数据文件。

咱们迁徙了整个www.optaplanner.org网站(1399 个文件)以应用 Java 和 Maven,而不是 Ruby 和 Rake 进行构建。从外表上看,什么都没有扭转。但在源代码中,对于咱们的 Java 开发人员团队来说,它是一个游戏规则扭转者。

咱们的 Java 团队当初能够轻松地为网站做出奉献。在实现迁徙后的几个小时内,咱们的一位开发人员曾经提交了一份不违心用十英尺长的杆子接触以前的源代码的提交。

咱们建设了这个网站。
咱们在 Java 和 Maven 上构建了这个站点。
咱们建设了这个网站。
咱们在 JBake 和 Freemarker 上建设了这个网站。

为什么应用动态网站生成器?

动态网站生成器将模板和内容文件转换为动态 HTML/JS/CSS 网站。对于咱们这样的我的项目,这比内容管理系统 (CMS) 有很多劣势:

托管很便宜。GitHub 页面甚至收费托管动态网站。

源文件进入 Git 进行备份和历史记录。

源文件为纯文本格式:

更改以拉取申请的模式呈现,以进行适当的审查和 CI 验证。

源代码在咱们的 IDE 中是凋谢的,这激励将它们与代码一起重构。这会缩小古老的内容。

多年来,Awestruct 始终为咱们服务。但因为不足流动,是时候降级了。

为什么是 JBake?

因为咱们是 Java 程序员。

有几个很好的动态网站生成器,比方 Jekyll (Ruby) 和 Hugo (Go)。咱们抉择JBake (Java),因为:

咱们的网站当初应用 Maven ( mvn generate-resources)构建。

无需装置任何货色。甚至不是 JBake。每个人都应用雷同版本的 JBake 构建,如pom.xml.

而且速度很快:即便mvn clean在我的机器上构建 150 个输入页面也只须要 20 秒。

.上面全是Java。

编写条件表达式很简略。API ( String.substring(), …) 很相熟。日期格局 ( d MMMM yyyy) 和正则表达式的行为合乎预期。

最重要的是,谬误音讯很分明。

8 年来,我用 Awestruct (Ruby) 编写了这个网站。但我素来没有花工夫好好学习 Ruby,所以每次扭转都须要数小时的重复试验。我不能只是浏览谬误音讯并修复它。这不是鲁比的错。那是因为我素来没有花几天工夫来真正学习 Ruby。应用 JBake,我能够在很短的工夫内修复谬误:不再须要重复试验。

什么是 JBake?

JBake 是一个动态网站生成器,有很多选项:

应用 Maven 或 Gradle 构建。

咱们抉择Maven,因为咱们所有的 repos 都是用 Maven 构建的(只管两个OptaPlanner Quickstarts也用 Gradle 构建,因为 OptaPlanner 也反对 Gradle)。

用 Asciidoc、Markdown 或 HTML 编写内容。

咱们抉择Asciidoc是因为它比 Markdown更丰盛、更牢靠。此外,咱们所有的文档都是用 Asciidoc 编写的。

应用 Freemarker、Thymeleaf 或 Groovy 创立模板。

咱们抉择Freemarker是因为它是一个弱小的、通过实战考验的模板引擎。

技巧和诀窍

这些是构建高级动态网站的常见工作以及如何在 JBake-Freemarker 中实现每个工作。您甚至能够将这些JBake 设计模式称为:

应用宏渲染共享内容

咱们简直所有的模板都显示雷同的最新版本面板:

最新公布

Freemarker 模板非常适合防止反复本人 (DRY):
templates/macros.ftl应用输入 HTML 的宏创立:

<#macro latestReleases>
    
Latest release
...

而后在*.ftl模板中应用它:

<#import "macros.ftl" as macros>
...
...
<@macros.latestReleases/>

应用数据文件增加视频、事件或其余易失性数据

某些数据更改过于频繁,无奈在内容或模板文件中进行保护:

一个数据文件,例如一个简略的*.yml文件,能够很好地保留这样的易失性数据:

创立data/videos.yml:

- youtubeId: blK7gxqu2B0
title: "Unit testing constraints"
...

- youtubeId: gIaHtATz6n8
title: "Maintenance scheduling"
...

- youtubeId: LTkoaBk-P6U
title: "Vaccination appointment scheduling"
...

而后在ftl模板中应用它:


<#assign videos = data.get('videos.yml').data>

Latest videos

布局继承

所有 HTML 页面通常共享雷同的 HTML 头(元数据)、页眉(导航)和页脚。这些非常适合base.ftl布局,由所有其余模板扩大:

只管大多数内容应用normalBase.ftl,但useCaseBase.ftl所有用例页面都有独自的模板,例如车辆路线问题 (VRP)、保护打算和轮班排班。

应用带有 的宏<\#nested>来构建布局继承:

创立templates/base.ftl:


<#macro layout>
    
        
          ...
        
        
            
... <#-- header -->
<#nested>
... <#-- footer -->

扩大它templates/useCaseBase.ftl并引入自定义属性related_tag:


<#import "base.ftl" as parent>

<@layout>${content.body}

<#macro layout>
    <@parent.layout>
        

${content.title}

<#nested>

Related videos

<#assign videos = data.get('videos.yml').data> <#assign relatedVideos = videos?filter(video -> video.tags.contains(content.related_tag))>

创立content/vehicleRoutingProblem.adoc应用该模板并设置该related_tag属性的用例页面:


= Vehicle Routing Problem
:jbake-type: useCaseBase
:jbake-related_tag: vehicle routing

The Vehicle Routing Problem (VRP) optimizes the routes of delivery trucks,
cargo lorries, public transportation (buses, taxi's and airplanes)
or technicians on the road, by improving the order of the visits.
This routing optimization heavily reduces driving time and fuel consumption compared to manual planning:

...

开始
本人试试吧。要构建www.optaplanner.org网站,请运行以下命令:

$ git clone https://github.com/kiegroup/o&#8230;
&#8230;
$ cd optaplanner-website
$ mvn clean generate-resources
&#8230;
$ firefox target/website/index.html
或者看看源代码。


推荐阅读
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • Vue CLI 基础入门指南
    本文详细介绍了 Vue CLI 的基础使用方法,包括环境搭建、项目创建、常见配置及路由管理等内容,适合初学者快速掌握 Vue 开发环境。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
author-avatar
西安黄河文化补习学校
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有