经过大量调查,我确定最好的选择是编写我自己的 Maven 插件。我有一个简单的 .html 模板,其中包含有关将 CSS 和 JS 标记插入 HTML 的位置的指令:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Fifa Social - Hello World</title>
<meta name="description" content="Hello World app for Fifa Social">
<meta name="viewport" content="width=device-width">
$cssIncludes$
$jsIncludes$
</head>
<body>
<p>Page content</p>
</body>
</html>
然后,我有一个在 Maven 生命周期的“生成源”阶段运行的 Maven 插件,它采用模板并用适当的和标签列表替换$cssIncludes$
and 。(注意:我使用antlr stringtemplate Java 库作为插件的依赖项)。$jsIncludes$
<script>
<link>
我不能发布实际的插件,因为它是一个专有项目,但它是从 AbstractMojo 扩展的单个 Java 类
- 它具有从 POM
@parameter
中读取的属性<configuratioon>
- html模板的位置
- 输出文件的位置
- JS文件列表
- CSS 文件列表
- 在执行期间
- 从文件中读取 html 模板并将其存储为字符串
org.antlr.stringtemplate.StringTemplate
从 html 模板创建一个
- 使用默认的
org.antlr.stringtemplate.language.DefaultTemplateLexer
.
- 循环遍历配置中的 JS 和 CS 文件,将
<script>
and<link>
标记创建为字符串
- 用于
template.setAttribute
将构建的字符串绑定到 $cssIncludes$ 和 $jsIncludes$
- 将模板写入文件系统
它工作得很好。我只是根据当前的 Maven 配置文件向插件发送不同的 JS 和 CSS 文件列表。