《Maven实战》笔记 2.2 - dependency scope及其传递性

四个主要的scope:   1.compile: 编译和运行时都需要    2.provided: 编译时需要,运行时不用。比如web应用对servlet-api的依赖    3.runtime:  运行时需要,编译时不用。比如mysql的jdbc driver    4.test: 顾名思义 scope的传递:   1. 若A->B是compile,B->C是compile,则A->C也是complile   2. 若A->B是provided,B->C是provided,则A->C也是provided   3. 若A->B是provided,B->C是compile,则A->C是provided

《Maven实战》笔记 2.1 - Coordinate的概念

Coordinate翻译成“坐标”,正如空间的一个点可以用(x,y,z)来唯一地标识一样,Maven里的工程也可以通过(groupId, artifactId, version, packaging, classifier)来唯一地标识 其中,“groupId, artifactId, version”称作基本坐标,一般用这几个就够了

《Maven实战》笔记 1 - 一些杂碎

Maven的三大功能   1.构建: 类似于Ant,但比Ant更强调Convention Over Configuration,有利于在组织内形成标准   2.依赖管理:这一点应该是Maven最重要的特性   3.项目信息管理:好像第三方框架才用这种东西? Eclipse插件   1.可以装一个m2eclipse   2.m2eclipse自带了一个Maven,应该配置一下,让它使用你安装的正牌Maven;这是为了让整台机器只使用一个Maven,避免两个Maven都作用于同一个工程,造成难以预料的错误。 杂   1.pom.xml里的<name>元素没有多大实际作用,你可以填一下可读性较好的项目名称,如"web module of xxx platform"   2.java类的包名应该包含本工程的groupId和artifactId

选择Maven的最初动机是什么?

Maven能干很多事情,但你当时选择它或者去了解它,是因为什么目的? 今天问自己这个问题,居然一时间答不上来,能想到的只是一些“依赖管理”、“构建管理”之类的泛泛的说法。 后来回忆了一些,想起来了。当时真应该坚持使用Maven。 当时的想法是:   1. 组织内有好几个应用   2. 应用之间需要共享一些业务逻辑组件,即jar库   3. jar库需要频繁经常构建和版本升级,这些事情手动做很麻烦,所以当时考虑引入Maven;当时脑子里还没建立起版本号的概念,以为这是第三方框架才用的东西,如果当时仔细研究了Maven,还可以顺便建立起版本的概念,为未来的服务化铺平道路。

DDD可以帮助你“快速定位代码“

今天有个牛人提到了这一点,我觉得很有意义。 DDD(领域驱动设计)提倡让Entity来负担业务逻辑,而不是都往Service里塞; 这样的一个好处是,某Entity相关的逻辑会集中在这个Entity类内部,也就是说。 当你要查看某块功能的代码时,你基本上都能在这个Entity类里找到。 这其实也是封装性的体现,即把某Entity自身的功能封装在Entity内部,对外只提供比较宏观的接口,Service之流不准直接干涉Entity的细节。 如果不走这条路,那你就要去Service里找; 而跟一个Entity相关的Service可能会有很多很多个,到时找起来就麻烦了。

发布了一个用于在页面上查看日志的小工具:玻璃墙(Glasswall)

开发和测试时, 你想不想在浏览器的页面上直接看到本次http请求所产生的log4j日志? 开源项目“ 玻璃墙”(Glasswall)就是这样一种工具。它让你在页面上直接看到日志输出,帮你在遇到问题时迅速地发现问题,而不用辛苦地去服务器上找日志然后grep。如图: Glasswall的功能很简单,但它有个 在易用性方面有个优势:“非侵入”。使用Glasswall,   1. 你用不着做任何代码、配置文件的改动,也不用把任何jar文件丢到web应用里或应用服务器里。   2. 你只需要在启动应用服务器的命令行里加上"-javaagent"参数   3. 或者连这个参数都可以不加;你可以在web应用启动后,另外敲一个命令:“./glasswall.sh <pid> ”(windows下是glasswall.bat)。 Glasswall的应用场合是所有基于Servlet的web application,目前支持的日志框架除了log4j,还有java.util.logging。 使用者的jdk版本须在java 5以上; 如果想使用零侵入的“./glasswall.sh <pid> ” ,则须java 6以上的SUN JDK。 另外,操作系统不限。 更多细节详见 http://code.google.com/p/glasswall/的首页介绍,也可到作者的微博留言: http://weibo.com/u/2474145202 有兴趣的同学可以下载下来试试。 另外,虽然我自认为做了很全面的测试,但可能仍有缺陷。 欢迎大家在使用时检视代码,提交补丁,或者加入项目。 声明:     1. 这个主意不是本人原创。类似的东西已经存在,本人只是写了一个非侵入式的版本     2. 这个项目的构思和设计都深受开源项目BTrace的影响,有兴趣的同学可以研究下Btrace

com.sun.tools.attach.AttachNotSupportedException: no providers installed

如果你看到了这个异常: com.sun.tools.attach.AttachNotSupportedException: no providers installed, 十之八九是因为下面中的一个:   1. 你没有使用sun jdk   2. 你使用了sun jdk,并且JAVA_HOME指向了这个jdk,但是你的path下的"java"命令不是这个jdk里面的java,而是操作系统给你默认安装的jre下的,如c:\Program Files\java\….

认识了一个新朋友:JBoss Tattletale

它可以帮你解决以下问题:    1. You are faced with a lot of Java archives and you don’t know how they relate   2. You need to know in which archive(s) a class is located or if it is missing from the class-path   3.You need quick access to version identifiers and the OSGi status 比如说,要检查某个类是否存在于WEB-INF/lib下的多个jar文件中,就可以这个工具。 Tattletale可作为独立的命令行工具使用,也可以用作Maven插件。它还计划与Hudson集成。