仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 491|回复: 13
打印 上一主题 下一主题

[学习教程] 发布一篇模块化Java:静态模块化

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:12:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
微软什么都提供了。你可以试想一下,如果你是新手,你是希望你点一下按钮程序就能运行那,还是想自己一点一点的组织结构,然后打包发部,调错再打包......
模块化是年夜型Java体系的一个主要特性。在这些项目中构建剧本和项目一般被分别为多个模块,以便改善构建历程,可是在运转时却很少思索分别模块的成绩。
在“模块化Java”系列文章的第二篇里,我们将会商静态模块化(staticmodularity)。内容包含怎样创立bundle、将其安装到OSG引擎和如何创建bundle之间的版本依附。鄙人一篇文章中,我们将会商静态模块化(dynamicmodularity)并展现bundle怎样对其他bundle作出呼应。
在上篇文章《模块化Java简介》中讲到,Java在开辟时把package作为模块化单位,部署时把JAR文件作为模块化单位。但是只管像Maven如许的构建工具可以在编译时包管package和JAR的特定组合,但这些依附在运转时classpath下仍大概呈现纷歧致的情形。为懂得决这一成绩,模块能够声明其依附需求,如许,在运转时就能够在实行之行进行依赖反省。
OSGi是一个Java的运转时静态模块体系。OSGi标准形貌了OSGi运转时的事情举动体例;以后版本是OSGiR4.2。
一个OSGi模块(也称为bundle)就是一个一般的JAR文件,但在其MANIFEST.MF中带有附加信息。一个bundle的manifest必需最少包括以下内容:
Bundle-ManifestVersion:对OSGiR4bundle来讲必需是2(OSGiR3bundle则默许为1)
Bundle-SymbolicName:bundle的文本标识符,一般以反向域名的情势呈现,如com.infoq,而且常常对应了包括个中的package
Bundle-Version:major.minor.micro.qualifier情势的版本号,前三个元素是数字(缺省是0),qualifier则是文本(缺省是空字符串)
创立一个bundle
最复杂的bundle必需在manifest文件中包括以下内容:
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.infoq.minimal
Bundle-Version: 1.0.0
创立bundle并没有甚么可希奇的,那末让我们创立一个带activator的bundle吧。上面是OSGi特定的代码片断,在bundle启动时被挪用,有点像是bundle的main办法。
package com.infoq;
import org.osgi.framework.*;
public class ExampleActivator implements BundleActivator {
 public void start(BundleContext context) {
  System.out.println("Started");
 }
 public void stop(BundleContext context) {
  System.out.println("Stopped");
 }
}
为了让OSGi晓得哪一个类是activator,我们必要在manifest中到场分外的信息项:
Bundle-Activator: com.infoq.ExampleActivator
Import-Package: org.osgi.framework
Bundle-Activator声了然在bundle启动时要实例化并挪用其start()办法的类;相似的,在bundle中断时将挪用该类的stop()办法。
那末Import-Package又是干甚么的?每一个bundle都必要在manifest中界说其依附,以便在运转时判别一切必须代码是不是可用。在本例中,ExampleActivator依附于org.osgi.framework包中的BundleContext;假如我们不在manifext中声明该依附,在运行时就会碰着NoClassDefFoundError毛病。
<p>
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),
小魔女 该用户已被删除
13#
发表于 2015-3-29 01:43:59 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
分手快乐 该用户已被删除
12#
发表于 2015-3-19 16:30:43 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
小妖女 该用户已被删除
11#
发表于 2015-3-11 23:42:13 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
不帅 该用户已被删除
10#
发表于 2015-3-11 20:06:52 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-9 20:18:01 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
因胸联盟 该用户已被删除
8#
发表于 2015-3-4 23:13:25 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
老尸 该用户已被删除
7#
发表于 2015-3-4 10:05:17 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
6#
发表于 2015-2-13 23:43:49 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
谁可相欹 该用户已被删除
5#
发表于 2015-2-6 16:32:12 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
简单生活 该用户已被删除
地板
发表于 2015-2-2 15:00:35 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
兰色精灵 该用户已被删除
板凳
发表于 2015-1-25 06:51:05 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
海妖 该用户已被删除
沙发
 楼主| 发表于 2015-1-20 12:27:56 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
再现理想 该用户已被删除
楼主
发表于 2015-1-18 15:07:43 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 18:18

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表