将FMPP与Gradle一起使用

时间:2018-10-11 14:44:06

标签: gradle ant build.gradle fmpp

我正在尝试将使用fmpp的ant任务转换为gradle。我无法建立我的项目。我的build.xml文件中包含以下内容:

<div *ngFor="let post of posts">
  {{ post.body }}
</div>

我的build.gradle文件看起来像这样

<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>

但是当我运行它时,出现以下错误

  

FMPP处理会话失败。     原因:freemarker.core.InvalidReferenceException:表达式base_url在data / header.htm中的第15行第47列中未定义。

因此,似乎htm文件中的模板变量未在我的构建中正确拾取和实现。我不确定该如何解决。有一些fmpp的gradle插件,但文档非常有限,我很难让它们中的任何一个正常工作。如果有任何建议或解决方法,将不胜感激。

***更新

这里是试图应用htm文件的示例

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
    }
}

1 个答案:

答案 0 :(得分:1)

问题在于,从<li *ngFor="let log of (delayed$ | async)" [innerHTML]="log"></li> 读取的属性和数据属性的命名都完全相同。要解决此问题,您需要使用gradle.properties实例引用隐藏在属性下的值,例如:

project

看看我刚刚准备的demo。它运行没有任何错误。如果您在base_url = project.base_url 中重命名属性,则可以跳过gradle.propertiesproject属性就是这种情况-故意重命名。