【发布时间】:2018-10-11 14:44:06
【问题描述】:
我正在尝试将使用 fmpp 的 ant 任务转换为 gradle。我无法构建我的项目。我的 build.xml 文件中有以下内容:
<project name="website">
<property file="build.properties" />
<property name="src.dir" location="src" />
<property name="build.dir" location="build" />
<taskdef name="fmpp" classname="fmpp.tools.AntTask">
<classpath>
<pathelement location="lib/fmpp.jar"/>
</classpath>
</taskdef>
<target name="clean">
<delete dir="${build.dir}" />
</target>
<target name="dist">
<fmpp sourceRoot="${src.dir}" outputRoot="${build.dir}">
<data expandProperties="yes">
base_url: ${base_url}
google_analytics_number: ${google_analytics_number}
mail_user: ${mail_user}
mail_password: ${mail_password}
mail_recipient: ${mail_recipient}
upload_folder: ${upload_folder}
host: ${host}
port: ${port}
</data>
</fmpp>
</target>
</project>
我的 build.gradle 文件如下所示
ant.taskdef(name: 'fmpp', classname:'fmpp.tools.AntTask') {
classpath {
fileset(dir: 'lib', includes: '*.jar')
}
}
ant.fmpp(sourceRoot:"src", outputRoot :"build") {
data(expandProperties: 'yes'){
base_url = base_url
google_analytics_number = google_analytics_number
mail_user = mail_user
mail_password = mail_password
mail_recipient = mail_recipient
upload_folder = upload_folder
host = host
port = port
}
}
但是当我运行它时,我得到了以下错误
FMPP 处理会话失败。 原因:freemarker.core.InvalidReferenceException:表达式 base_url 在 data/header.htm 的第 15 行第 47 列未定义。
所以看起来 htm 文件中的模板变量在我的构建中没有被正确拾取和实现。我不知道如何解决这个问题。 fmpp 有一些 gradle 插件,但文档非常有限,我很难让它们中的任何一个工作。如果有人有建议或解决方法,将不胜感激。
***更新
这是一个尝试应用的 htm 文件示例
<head>
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$page = basename($_SERVER['PHP_SELF']);
require_once($_SERVER['DOCUMENT_ROOT'] . '/js/functions.php');
?>
<title>
<#if title??> ${title}
<#else> CompSci Resources, LLC | The Complete EDGAR and XBRL Filing Platform, and more!
</#if>
</title>
<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script>
<script type='text/javascript' src='${base_url}/js/bootstrap-filestyle.min.js'> </script>
<script type='text/javascript' src='${base_url}/js/bootstrap.min.js'></script>
<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/jcarousel/0.3.4/jquery.jcarousel.js'></script>
<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/jcarousel/0.3.4/jquery.jcarousel-autoscroll.min.js'></script>
<script type='text/javascript' src='${base_url}/js/compsci.js'></script>
<script type='text/javascript' src='${base_url}/js/carousel.js'></script>
<script type='text/javascript' src='${base_url}/js/readmore.js'></script>
<link rel='shortcut icon' href='${base_url}/images/littlelogo.png' >
<link rel='stylesheet' type='text/css' href='${base_url}/css/jcarousel.css' >
<link rel='stylesheet' type='text/css' href='${base_url}/css/bootstrap.css'>
<link rel='stylesheet' type='text/css' media='screen, projection' href='${base_url}/css/compsci.css'>
<style type='text/css'>
@media screen and (-webkit-min-device-pixel-ratio:0) {
h2 { font-weight: normal; }
.csr-services-popper-left { margin-top:11px; }
}
</style>
<!-- Google Analytics -->
<script type='text/javascript'>
//Google Analytics
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '${google_analytics_number}']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<meta charset="UTF-8">
<meta name="language" content="en">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
【问题讨论】:
-
在传递给
data的闭包中尝试冒号:而不是等号=,因此,例如:base_url: base_url。 -
我试过了,但它给了我以下错误 Statement labels may not be used in build scripts。如果您尝试配置名为 'base_url' 的属性,请将 ':' 替换为 '=' 或 ' ',否则不会达到预期效果。 @ 第 24 行,第 19 列。 base_url: base_url
-
我需要快速浏览一下我的旧项目,它以类似的方式使用了 ant。会保留你的海报..
-
base_url是 Ant 中设置的属性,对吧?如果是这样,您需要从 Ant 项目中提取它,因为 Gradle 无法直接访问它。试试base_url = ant.base_url。 -
这样做会给我以下错误 --- 评估根项目“csWebsite”时出现问题。 > 没有这样的属性:类的base_url:org.gradle.api.internal.project.DefaultAntBuilder
标签: gradle ant build.gradle fmpp