gradle - 将FMPP与Gradle一起使用

标签 gradle ant build.gradle fmpp

我正在尝试将使用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 processing session failed. Caused by: freemarker.core.InvalidReferenceException: Expression base_url is undefined on line 15, column 47 in data/header.htm.



因此,似乎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" />

最佳答案

问题在于,从gradle.properties读取的属性和数据属性的命名都完全相同。要解决此问题,您需要使用project实例引用隐藏在属性下的值,例如:

base_url = project.base_url

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

关于gradle - 将FMPP与Gradle一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52762913/

相关文章:

android - Android Tensorflow Lite C++ .SO库未在运行时链接

java - 在 eclipse 中从 .class 文件构建可执行 jar 文件

Gradle - 从 War 文件中排除提供的作用域 jar

ant - 如何仅在 Ant 中列出一级子目录?

javascript - 如何解释并运行以下 ant 命令?

android - ionic 3 : more than one library with package name 'com.google.android.gms.license'

java - 如何获取JavaParser方法参数解析的原始包名或类

maven - 为什么Nexus(3.0.2)不会将快照jar返回Gradle(3.2.1)而是404状态?

android - 在 Android 应用发布版本中获取错误的版本代码和版本名称

android-studio - AS 2.0更新后,“忽略InnerClasses属性”警告变为错误