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


推荐阅读
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 深入解析经典卷积神经网络及其实现代码
    深入解析经典卷积神经网络及其实现代码 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 在Kohana 3框架中,实现最优的即时消息显示方法是许多开发者关注的问题。本文将探讨如何高效、优雅地展示flash消息,包括最佳实践和技术细节,以提升用户体验和代码可维护性。 ... [详细]
  • 如何高效利用Hackbar插件提升网页调试效率
    通过合理利用Hackbar插件,可以显著提升网页调试的效率。本文介绍了如何获取并使用未包含收费功能的2.1.3版本,以确保在不升级到最新2.2.2版本的情况下,依然能够高效进行网页调试。此外,文章还提供了详细的使用技巧和常见问题解决方案,帮助开发者更好地掌握这一工具。 ... [详细]
  • JavaScript最初并非设计为纯粹的面向对象编程(OOP)语言,因为直到ES5标准中仍未引入类的概念。然而,随着ES6的发布,JavaScript正式引入了类的语法,使得开发者能够更加直观地实现继承机制。本文将深入探讨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社区 版权所有