热门标签 | 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
或者看看源代码。


推荐阅读
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
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社区 版权所有