maven-eclipse-plugin v2.6与aspectj

最近一段时间以来,项目中使用maven-eclipse-plugin的eclipse:eclipse目标时比较恼人。pom里已经加入了aspectj的依赖,但生成的.classpath里却没有相应的classpathentry。

今天google到了解决办法,有两个:

1. 强制使用上个版本的maven-eclipse-plugin
org.apache.maven.plugins
maven-eclipse-plugin
2.5.1

2. 设置ajdtVersion为none
org.apache.maven.plugins
maven-eclipse-plugin

none

BugFree与SVN整合脚本修改

目前团队里使用subversion做版本控制,bugfree做缺陷管理。参照官方的做法实现了bugfree和svn的整合。

我为每个项目都设置了单独的svn仓库,这样在用viewvc浏览版本库时要指定root查询参数才能访问每个项目的代码库。因此我修改了bugfree官方提供的钩子脚本和向bugfree提交svn信息的php脚本,加入了对root查询参数的支持。具体改动见附件

另外,为了维护方便,我在每个项目的hooks目录里做一个到钩子脚本的软链接,这样就只需维护一个钩子脚本文件了。

解决Maven Jetty Plugin在Windows下的“文件锁定”问题

使用Maven进行Java的web开发,Jetty Plugin是必不可缺的插件,可以极大的提到开发效率。但在Windows环境下会遇到静态文件(html、css、js)被锁定、无法即时更新的问题。要想更新这些文件,只能先停掉Jetty,保存修改,再启动Jetty,非常不方便。
解决办法是这样的:
1、从jetty.jar中解出webdefault.xml(位于org.mortbay.jetty.webapp包下)这个文件,把这个useFileMappedBuffer参数设为false

useFileMappedBuffer true

2、把修改后的webdefault.xml文件跟pom.xml放在一起
3、修改pom.xml里的Jetty Plugin的配置,加入webdefault.xml

... org.mortbay.jetty
maven-jetty-plugin
6.1.7

/
webdefault.xml
...

...
...

Web页面自动打印PDF文件的实现

借助iText和Adobe Acrobat的Javascript支持,可以实现PDF文档的自动打印(可以做到不显示打印对话框)

......

PdfReader reader = new PdfReader(pdfStream); [1]

StringBuffer script = new StringBuffer(); [2]
script.append("this.print({bUI: false,bSilent: true,bShrinkToFit: false});")
.append("\r\nthis.closeDoc();");

ByteArrayOutputStream bos = new ByteArrayOutputStream(pdfStream.length);
try {
PdfStamper stamp = new PdfStamper(reader, bos); [3]
stamp.setViewerPreferences(PdfWriter.HideMenubar
| PdfWriter.HideToolbar | PdfWriter.HideWindowUI);
stamp.addJavaScript(script.toString());
stamp.close();
} catch (DocumentException e) {
logger.error(e.getMessage(), e.getCause());
}

return new StreamingResolution("application/pdf",
new BufferedInputStream(new ByteArrayInputStream(bos.toByteArray()))) ;

......

代码说明:
1、pdfStream是用iText生成的PDF文档字节流
2、script是要加入到PDF文档里的Javascript代码。这段Javascript代码先调用PDF文档对象的print方法,然后用closeDoc方法关闭文档。print方法的参数指定了不要显示打印对话框,参数含义参考Acrobat JavaScript Scripting Reference
3、bos用来保存加入Javascript后的PDF文档字节流,它作为PdfStamper对象的输出流。PdfStamper对象调用addJavaScript方法将Javascript代码加入到PDF文档中。

Web页面嵌入PDF文档:


发布jar包到自己设立的Maven Repository

使用Artifactiry为自己的开发团队设立了repository镜像。有时需要把本地的一些第三方的jar包发布到服务器,使用maven-deploy-plugin的deploy:deploy-file目标可以完成这个任务。

比如,要发布jta的jar包jta-1.0.1B.jar

$ mvn deploy:deploy-file -DgroupId=javax.transaction \
-DartifactId=jta \
-Dversion=1.0.1B \
-Dpackaging=jar \
-Dfile=~/.m2/repository/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar \
-DrepositoryId=central \
-Durl=http://host.of.your.repository[:port]/artifactory/ibiblio@repo

说明:

  • repositoryId在工程的pom文件里设置
  • url由Artifactiry的配置决定,注意不能使用virtual repository的地址
  • 如果远程repository需要身份验证,用户名和密码需要在maven的settings.xml里设置

参考:

  • http://maven.apache.org/guides/mini/guide-deploying-3rd-party-jars.html
  • http://www.jfrog.org/sites/artifactory/latest/import.html