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


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
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社区 版权所有