💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Writing a new Application (Experimental) ( 写一个新的应用程序( 实验 ) ) 原文链接 : [http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelinapplication.html](http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelinapplication.html) 译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=10031114](http://www.apache.wiki/pages/viewpage.action?pageId=10031114) 贡献者 : [小瑶](/display/~chenyao) [ApacheCN](/display/~apachecn) [Apache中文网](/display/~apachechina) ## 什么是 Apache Zeppelin Application ? **Apache Zeppelin Application** 是一个运行于解释器进程的软件包,并将其显示在笔记本计算机的内部。当应用程序运行在解释器进程时,它能够通过 **ResourcePool** 访问解释器提供的资源。输出始终由 **AngularDisplaySystem** 呈现。因此,应用程序提供使用任何解释器的数据和处理能力的交互式图形应用程序的所有可能性。 ## Make your own Application ( 创建你自己的 Application ) 写入应用程序意味着扩展 **org.apache.zeppelin.helium.Application** 。当 **Java** 类文件打包到 **jar** 中时,您可以使用自己喜欢的 **IDE** 和语言。应用程序类看起来像 ``` /** * Constructor. Invoked when application is loaded */ public Application(ApplicationContext context); /** * Invoked when there're (possible) updates in required resource set. * i.e. invoked after application load and after paragraph finishes. */ public abstract void run(ResourceSet args); /** * Invoked before application unload. * Application is automatically unloaded with paragraph/notebook removal */ public abstract void unload(); ``` 您可以检查 **./zeppelin-examples** 目录下的示例应用程序。 ## Development mode ( 开发模式 ) 在开发模式下,您可以将 **Application** 作为普通的 **Java** 应用程序在 **IDE** 中运行,并查看 **Zeppelin notebook** 中的结果。 **org.apache.zeppelin.helium.ZeppelinApplicationDevServer** 可以在开发模式下运行 **Zeppelin Application** 。 ``` // entry point for development mode public static void main(String[] args) throws Exception { // add resources for development mode LocalResourcePool pool = new LocalResourcePool("dev"); pool.put("date", new Date()); // run application in devlopment mode with given resource // in this case, Clock.class.getName() will be the application class name org.apache.zeppelin.helium.ZeppelinApplicationDevServer devServer = new org.apache.zeppelin.helium.ZeppelinApplicationDevServer( Clock.class.getName(), pool.getAll()); // start development mode devServer.start(); devServer.join(); } ``` 在 **Zeppelin notebook** 中,运行 **%dev run** 将连接到在开发模式下运行的应用程序。 ## Package file ( 包文件 ) 软件包文件是一个 **json** 文件,提供有关应用程序的信息。 **Json** 文件包含以下信息 ``` { name : "[organization].[name]", description : "Description", artifact : "groupId:artifactId:version", className : "your.package.name.YourApplicationClass", resources : [ ["resource.name", ":resource.class.name"], ["alternative.resource.name", ":alternative.class.name"] ], icon : "<i class="icon"></i>" } ``` ### name ( 名称 ) **Name** 是 **[group]  [name]** 格式的字符串。 **[group]** 和 **[name]** 只允许 **[A-Za-z0-9_]** 。组通常是创建此应用程序的组织的名称。 ### description ( 描述 ) 有关应用程序的简短描述。 ### artifact **jar artifac**t 的位置。 **“groupId:artifactId:version”** 将从 **maven** 仓库加载工件。如果本地文件系统中存在 **jar** ,则可以使用 **absolute / relative** 。 例如 当 **artifact** 存在于 **Maven** 存储库中时 ``` artifact: "org.apache.zeppelin:zeppelin-examples:0.6.0" ``` 当 **artifact** 存在于本地文件系统中时 ``` artifact: "zeppelin-example/target/zeppelin-example-0.6.0.jar" ``` ### className ( 类名 ) 入口点。扩展 **org.apache.zeppelin.helium.Application** 的类。 ### resources ( 资源 ) 二维数组,按名称或类名定义所需的资源。 **Helium** 应用程序启动器将比较 **ResourcePool** 中的资源与该字段中的信息,并在 **ResourcePool** 中提供所有必需资源时才建议应用程序。 资源名称是一个字符串,它将与 **ResourcePool** 中的对象名称进行比较。 **className** 是一个前缀为“:”的字符串,它将与 **ResourcePool** 中对象的 **className** 进行比较。 应用程序可能需要两个或更多资源。所需的资源可以在json数组中列出。例如,如果应用程序需要对象 “**name1**” , “**name2**” 和 “**className1**” 类型的对象运行,则资源字段可以是 ``` resources: [ [ "name1", "name2", ":className1", ...] ] ``` 如果应用程序可以处理所需资源的替代组合,则可以列出替代集合。 ``` resources: [ [ "name", ":className"], [ "altName", ":altClassName1"], ... ] ``` 更容易理解这个方案 ``` resources: [ [ 'resource' AND 'resource' AND ... ] OR [ 'resource' AND 'resource' AND ... ] OR ... ] ``` ### icon ( 图标 ) 在应用程序按钮上使用的图标。此字段中的字符串将被呈现为 **HTML** 标记。 例如 ``` icon: "<i class='fa fa-clock-o'></i>" ```