网络会议openmeetings下的openmeetings-util文件分析1

2021SC@SDUSC

我负责的部分包括openmeetings-screenshareopenmeetings-util两个模块,前文已经将openmeetings-screenshare模块分析完毕,现在开始对openmeetings-util模块进行分析。本文主要对模块的结构进行梳理,开始源码的分析工作。

目录

openmeetings-util

pom.xml

target

src

site

test

main

总结


openmeetings-util

打开openmeetings-util:其同样是一个标准的maven目录结构。pom.xml则是maven项目的核心配置文件,是maven项目必须具备的文件。src目录包含了main、site以及test目录,其中main是存放项目的java文件及资源resources,site目录中保存了项目将要生成的各html文件等等,test目录即是用来放置测试的源码,可以将测试代码和源码分离开来。

pom.xml

同样我们先来查看根目录下的pom.xml文件,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.apache.openmeetings</groupId>
      <artifactId>openmeetings-parent</artifactId>
      <version>4.0.7</version>
      <relativePath>..</relativePath>
   </parent>
   <artifactId>openmeetings-util</artifactId>
   <packaging>jar</packaging>
   <name>Openmeetings Util</name>
   <description>Module for utility classes being used by all OpenMeetings modules</description>
   <properties>
      <site.basedir>${project.parent.basedir}</site.basedir>
   </properties>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
         </plugin>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
               <execution>
                  <goals>
                     <goal>test-jar</goal>
                  </goals>
               </execution>
            </executions>
         </plugin>
      </plugins>
      <resources>
         <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
         </resource>
      </resources>
   </build>
   <profiles>
      <profile>
         <id>Jenkins</id>
         <build>
            <plugins>
               <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-surefire-plugin</artifactId>
                  <inherited>true</inherited>
                  <configuration>
                     <excludedGroups>org.apache.openmeetings.test.NonJenkinsTests</excludedGroups>
                  </configuration>
               </plugin>
            </plugins>
         </build>
      </profile>
   </profiles>
   <dependencies>
      <dependency>
         <groupId>org.red5</groupId>
         <artifactId>red5-server</artifactId>
      </dependency>
      <dependency>
         <groupId>org.dom4j</groupId>
         <artifactId>dom4j</artifactId>
         <version>${dom4j.version}</version>
      </dependency>
      <dependency>
         <groupId>org.mnode.ical4j</groupId>
         <artifactId>ical4j</artifactId>
      </dependency>
      <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-lang3</artifactId>
      </dependency>
      <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-text</artifactId>
      </dependency>
      <dependency>
         <groupId>commons-codec</groupId>
         <artifactId>commons-codec</artifactId>
         <version>${commons-codec.version}</version>
      </dependency>
      <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
         <version>${commons-io.version}</version>
      </dependency>
      <dependency>
         <groupId>org.apache.wicket</groupId>
         <artifactId>wicket-util</artifactId>
         <version>${wicket.version}</version>
      </dependency>
      <dependency>
         <groupId>org.apache.wicket</groupId>
         <artifactId>wicket-native-websocket-core</artifactId>
         <version>${wicket.version}</version>
      </dependency>
      <dependency>
         <groupId>org.apache.wicket</groupId>
         <artifactId>wicket-extensions</artifactId>
      </dependency>
      <dependency>
         <groupId>org.apache.tika</groupId>
         <artifactId>tika-parsers</artifactId>
      </dependency>
   </dependencies>
</project>

首先声明了项目遵循哪一个POM模型版本,这里为4.0.0,定义了父项目的groupId(唯一标识符),构建标识符、版本信息以及父项目的pom.xml的相对路径“..”。然后定义了此项目的构建标识符“openmeetings-util”,以及该项目产生的构建类型(packaging打包机制)“jar”,描述:Module for utility classes being used by all OpenMeetings modules à该模块用于所有OpenMeetings模块使用的实用程序类。

<build></build>构建项目需要的信息,模块被构建成项目的一部分列出的每个模块元素是指向该模块的目录的相对路径。<plugin></plugin>元素包含描述插件所需要的信息,即描述要插入的插件,插入了org.apache.felix和org.apache.maven.plugins。<resources></resource>这个元素描述了单元测试相关的所有资源路径,这里为src/main/resources。

<profile></profile>元素在列的项目构建profile,如果被激活,会修改构建处理。这里id为Jenkins。

然后就是依赖列表<dependencies></dependencies>,项目引入插件所需要的额外依赖。这里插入了org.red5依赖,流媒体服务器。插入了org.dom4j依赖,是一个开源XML解析包,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。插入了org.mnode.ical4j依赖,是可以提供一种公共的数据格式用于存储关于日历方面的信息,比如事件、约定、待办事项等,可以推送会议提醒。

添加了commons-text、commons-lang3、commons-codec、commons-io等功能包。Apache Commons Text库包含许多有用的实用程序方法,这些方法可用于处理Strings,这是Java核心功能所没有的。apache提供的众多commons工具包,号称Java第二API,而common里面lang3包更是被我们使用得最多的。commons-codec是Apache开源组织提供的用于摘要运算、编码解码的包。常见的编码解码工具Base64、MD5、Hex、SHA1、DES等。Apache Commons IO 库包含了工具类,流的实现, 文件过滤器,文件比较器,endian转换类,还有其他更多的内容。

添加了org.apache.wicket下的wicket-util和wicket-native-websocket-core以及wicket-extensions依赖,Apache Wicket是一个功能强大的,轻量级的基于组件的Web应用程序框架,将表示和业务逻辑高度分离。还有最后一个org.apache.tika依赖,Apache Tika 是一个内容分析工具包,可以检测上千种文件类型,并提取它们的元数据和文本。tika在设计上十分精巧,单一的接口使它易于使用,在搜索引擎索引,内容分析,翻译等诸多方面得到了广泛使用。

以上是对openmeetings-util包下的pom.pom文件的整体分析,重点分析了它所添加使用的依赖。

target

out存放的是该项目下所有Module(模块)的编译结果。target存放的是单个Module的编译结果。如果为某个Module指定了编译结果的路径,则不会再输出到out文件夹中了。

你在Project Structure中的Project选项卡中可以设置Project compiler output的目录。

在Modules中选择某一个模块后,在右侧的Paths选项卡中可以设置该模块的Compiler output目录。

(上面这段话原文链接:

intellj idea中target目录和out目录有什么区别_ChasingdreamLY的博客-CSDN博客_idea中target

IDEA项目中target目录的作用target是idea默认的编译路径,用来存放项目的:文件和目录 、jar包、war包、class文件等。

src

再来看src目录下的文件:

src目录下有三个主要文件夹,前文提到过,包括main、site和test文件夹,其中main是存放项目的java文件及资源resources,site目录中保存了项目将要生成的各html文件等等,test目录即是用来放置测试的源码,可以将测试代码和源码分离开来。后续将会逐个分析每个文件里面包含什么内容。

site

首先看site文件,其中只有一个文件内容即site.xml,打开它:

每个item都有name属性和href属性,name属性和href属性一起决定一个html网页。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
      name="Apache OpenMeetings Project">
   <body>
      <menu ref="parent"/>
      <menu name="Project">
         <item name="About" href="/index.html" />
         <item name="Info" href="/project-info.html" />
         <item name="Summary" href="/summary.html" />
         <item name="License" href="http://www.apache.org/licenses/" />
         <item name="Dependencies" href="/dependencies.html" />
         <item name="Dependency Convergence" href="/dependency-convergence.html" />
         <item name="RAT Report" href="/rat-report.html" />
         <item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
      </menu>
   </body>
   <custom>
      <reflowSkin>
         <bottomNav maxSpan="12">
            <column>Parent Project</column>
            <column>Project</column>
         </bottomNav>
      </reflowSkin>
   </custom>
</project>

test

再来看test里面的内容:

首先看test包下的NonJenkinsTests里面有一个自定义注解类NonJenkinsTests,在Java中,定义注解其实和定义接口差多不,只需要在interface前添加一个@符号就可以。注解中的方法即为注解的元素,元素中不能包含参数,返回值只能为简单数据类型、String、Class、emnus、注释 和这些类型的数组。使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。

再看util包下,有几个可运行test类TestCalendarPatterns、TestStoredFile、TestVersion以及crypt包,crypt包下有一个抽象可运行类AbstractCryptTest和TestSCrypt类。

其中这些测试类都是对openmeetings-util里写的代码进行测试查看是否能正常运行,等分析完main文件夹下的代码再具体看这里的测试类代码。

main

 main文件夹下总共有25个类和接口,之后的文章将对其进行逐个分析,util是工具包,例如可以实现日历日期功能、版本功能、连接功能等。

总结

对openmeetings-util开了个头,主要是对根目录下的pom.xml展开分析,对模块结构进行梳理,整体描述,对site、main和test有个整体的了解,也对site下的site.xml进行了分析,之后将对此文件下的主要代码包main下的文件和类进行仔细分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Openmeetings提供视频会议,即时消息,白板,协作文档编辑和其他组件软件工具。它使用Media Server的API函数进行远程和流媒体Kurento。 OpenMeetings是一个多语言可定制的视频会议和协作系统。它支持音频、视频,能让你查看每个与会者的桌面。OpenMeetings还包含一个白板,通过白板可以导入各种格式的图片和涂鸦。 功能细节: 音频和视频会议 有四个使用OpenMeetings音频/视频功能的选项,您可以在会议期间选择它们。 音频+视频 仅音频 仅视频 仅图片 另外,您可以更改视频/音频质量,选择多个摄像机分辨率(4:3、16:9或3:2),然后选择输入设备。 会议录制和屏幕共享 录制的会议包含一切内容,包括从所有音频流中录制的声音,完全按照您在会议中看到的方式进行。 录制的会话可以下载为AVI / FLV文件。 可以选择共享的屏幕区域。 屏幕共享的不同质量步骤。 在集成的拖放文件资源管理器中观看和整理录音 文件管理器 每个会议室都有高级File-Explorer,拖放界面用于管理上载的文件,包括使用文件夹创建文档树的可能性。 File-Explorer中的私有和公共驱动器。File-Explorer有两个不同的视图,一个是Private Drive,另一个是Public Drive。专用驱动器始终包含相同的文件。这些文件仅对当前登录的用户可见。公共驱动器不与用户绑定,而是与会议室绑定。会议室中的所有用户都可以访问公共驱动器。 审核系统 在会议期间,主持人可以针对每个用户分别调整用户权限。  允许/拒绝审核  允许/拒绝权利在白板上绘画  添加/删除演示者角色  允许/拒绝屏幕共享/记录屏幕  允许/拒绝远程控制屏幕  允许/拒绝“静音其他人”权限  让其他用户静音时让一个用户讲话  允许/拒绝视频  允许/拒绝音频 Multi白板和聊天 在Multi白板中,您可以添加新的白板实例,每个白板中都可以包含所有工具和文档。 保存白板。您可以将每个白板实例另存为一个文件。该文件位于File-Explorer中,可以再次拖放到白板上,并且可以像其他任何文档,图像或文件夹一样组织。 带有绘图,书写,拖放,调整大小,图像(来自File-Explorer的拖放),Symbol / sCliparts的白板。 Full-fit确实会重新缩放屏幕上的文档,使其在所有屏幕上均100%可见,无论不同用户使用哪种屏幕分辨率。 您可以导入各种文档格式(PDF,DOC,ODT,PPT等) 用户和房间管理 您可以在单个OpenMeetings实例中管理用户和多个组织。您还可以创建只能通过SOAP-API进行访问的用户。 MyRooms部分。默认情况下,每个用户都有2个私人房间,该房间始终仅供该用户访问。有一些按钮可从仪表板进入这些房间。 您可以将会议室分配给所有用户,也可以仅将它们分配给特定的用户组。 私人留言中心 向用户发送消息并将其组织在文件夹中。您可以通过发送私人消息预订会议室。预订的活动将自动出现在您和参与者的日历中,对该活动的更改将填充到预订该活动的所有用户中。 用户联系人,您可以搜索用户并将其添加到您的联系人中。您甚至可以授予他们查看日历的权利。 使用集成的日历计划会议 计划您的会议并邀请OpenMeetings或External的与会者。 被邀请的与会者将收到一封包含会议详细信息的电子邮件,以及带有安全哈希表的会议室链接。 与您的联系人共享您的日历。 投票和投票 您可以使用是/否或1-10个问题创建民意调查,让用户投票并查看投票结果。 可以存储民意测验并将结果显示为饼图 后备 您可以将所有用户生成的数据(包括用户上传的文件)备份到一个ZIP文件中,然后将该ZIP导入到新安装的OpenMeetings中。 使用者介面: 翻译得到改善 邀请表显示客户所在时区的时间 使用JS Notification API显示通知 视频窗格的大小可以是固定的,并且可以按用户配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值