Java堂  


m2eclipse插件使用中提示jar包找不到的解决方法

Filed under: JavaPlateform — Jet @ 4:33 下午
原文出处: m2eclipse插件使用中提示jar包找不到的解决方法
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

在Eclipse中使用m2eclipse开发Maven项目的时候,如果是创建Module项目的时候经常会莫名的出现找不到子模块包的错误信息,但是pom.xml已经加入了改包的引用,并且使用mvn deploy命令等编译也没有任何错误,后来在Eclipse中的Marks View中发现一个项目的warning信息:

Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published. Runtime ClassNotFoundExceptions may result.

后来Google了一下,解决这个warning的步骤如下:
1. 首先右键项目,然后选择“Properties”,在左边选择Java Build Path,然后在右边的“Order andExport”标签中选中最下面的“Maven Dependencies”,然后确定;

2. 选择“Marks”或“Problems”视图,然后选中那个warning信息,右键选择“Quick Fix”,然后直接选择“Finish”,这样就可以了。

如果还是出现错误的信息,直接在上面的视图中右键删除提示就可以了。

参考资料:
Why the “MAVEN2_CLASSPATH_CONTAINER will not be exported or published”

Maven2部署构件到Nexus时出现的Failed to transfer file错误

Filed under: Architecture,JavaPlateform — Jet @ 12:45 下午
Tags: ,
原文出处: Maven2部署构件到Nexus时出现的Failed to transfer file错误
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

具体怎样使用deploy命令部署构件到nexus服务器上可以参考经典的《Maven Definitive Guide》(Maven操作指南),书中的16.7节里面讲解的非常详细。假设我们在项目pom.xml文件中对maven服务器的设置信息如下:

  1. <distributionManagement>
  2.       <repository>
  3.           <id>nexus-releases</id>
  4.           <name>Local Nexus Repository</name>
  5.           <url>http://192.168.1.99:8081/content/repositories/releases</url>
  6.       </repository>
  7.       <snapshotRepository>
  8.           <id>nexus-snapshots</id>
  9.           <name>Local Nexus Repository</name>
  10.           <url>http://192.168.1.99:8081/content/repositories/snapshots</url>
  11.       </snapshotRepository>
  12.   </distributionManagement>

这里我要说的是在使用的过程中遇到的几个都是“Failed to transfer file”错误,错误信息如下格式:

Error deploying artifact: Failed to transfer file:… Return code is:4xx

也就是说前面错误的信息都是一样的,只是后面返回的HTTP状态数字不同。

1. Return code is: 405
这个问题害我查了两个多小时才发现错误的根源,简单的错误就是在Maven执行到上传文件到服务器的时候出现一个HTTP 405错误。开始的时候总以为是Maven本身的问题,所以在这个上面浪费了不少时间。后来仔细查了405错误的含义是“用来访问本页面的 HTTP 方法不被允许”,最后终于发现是因为前面repository的地址写错了,或者是端口写错,或者是地址中的某个单词拼错了,反正原因就是repository的地址写错了

2. Return code is: 401或者Return code is: 403
其实403错误就是“禁止访问”的含义,所以问题的根源肯定在授权上面。Maven在默认情况下会使用deployment帐号(默认密码deploy)登录的系统,但是关键的Nexus中Releases仓库默认的Deployment Policy是“Disable Redeploy”,所以无法部署的问题在这个地方,方法是将其修改为“Allow Redeploy”就可以了。

到这里还没有结束,因为如果直接按照上面的设置的话会有一个安全问题,那就是这样所有的开发人员都可以将构件部署到Nexus的releases仓库中了,时间长了会导致这个仓库中非常乱,这也应该是nexus为什么默认情况下将Release仓库的发布权限关闭的原因了。解决这个问题的整体思路就是在部署构件的时候需要使用用户名和密码登录,操作如下:
(1) 首先将Releases仓库默认的Deployment Policy修改为“Allow Redeploy”;
(2) 然后在右边的Security下面的Users中,修改deployment帐号的密码,方法是在帐号上右键,然后选择“Set Password”(PS:这个操作我找了好久,后来无意中右键才找到,呵呵~~);

(3) 这个时候如果直接执行 mvn deploy 命令的话就又会出现401错误,还有一步就是将密码设置到Maven settings.xml中。打开settings.xml文件(${user.home}/.m/settings.xml或%{m2_home}/conf/settings.xml),找到<servers>,然后修改信息如下:

  1. <server>
  2.       <id>nexus-releases</id>
  3.       <username>deployment</username>
  4.       <password>deploydv89</password>
  5.     </server>
  6.  
  7.     <server>
  8.       <id>nexus-snapshots</id>
  9.       <username>deployment</username>
  10.       <password>deploydv89</password>
  11.    </server>

这里需要特别说明一句的是里面的id必须和你在项目pom.xml文件中distributionManagement下面设置的仓库id一致!当然了,这个里面你也可以设置admin帐号,或者参照deployment的权限手动添加新的帐号等等都是可以的。

当然,问题到这里已经得到了比较完美的解放,但是如果有人还要较真的话会想到帐号的密码直接放到配置文件里面不是很安全。其实只要这里不建议放admin帐号,而deployment是无法登录的。如果非要更安全一些的话,也可以使用Maven 2.1.0之后所提供的密码加密功能,操作的步骤如下:
(1) 使用“mvn –encrypt-master-password xxx”或“mvn –emp xxx”创建一个主密钥,后面的xxx就是你所要设置的密钥的内容,这个密钥主要用于后面加密密码来用的;命令执行之后会产生一个类似{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}形式的字符串。
(2) 在${user.home}/.m/目录下创建一个名为settings-security.xml文件,我们将刚刚产生的主密钥放到这个文件中,文件的内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <settingsSecurity>
  3.     <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
  4. </settingsSecurity>

注意,这个settings-security.xml文件一定要放在${user.home}/.m/目录下面,而不能放在${m2_home}/conf目录下!
(3) 使用“mvn –encrypt-password xxx”或“mvn –ep xxx”命令对帐号的密码进行加密,后面的xxx就是帐号的密码,加密之后依然会产生一个“{xxx}”形式的字符串,将这个字符串替换上面settings.xml文件中的server下面的password节点内容即可。
还有一种更安全的方式,就是将主密钥放到U盘里面,具体的操作可以看下面的参考资料。

3. Return code is: 400
400错误的含义是“错误的请求”,在这里的原因是往往是没有部署到nexus的仓库中。nexus的repository分三种类型:Hosted、Proxy和Virtual,另外还有一个repository group(仓库组)用于对多个仓库进行组合。部署的时候只能部署到Hosted类型的仓库中,如果是其他类型就会出现这个400错误。

还有一种情况也会出现400错误,就是默认情况下部署构件到Releases仓库中有时也会出现400错误,这个原因就像上面提到的那样,Nexus中Releases仓库默认的Deployment Policy是“Disable Redeploy”,所以无论你在settings.xml文件中将server的username设置为deployment还是使用admin都是无法部署的,就会出现这个400错误。这个问题也困扰了我好长时间,而且我还看到网上有人说admin没有部署构件的权限,这个是不对的。修改的方法可以参考上面第2条的做法。

参考资料:
maven 中 部署构件至Nexus(mvn deploy)
Maven2中需要注意的问题
maven deploy到nexus私服出错问题
Maven Tips and Tricks: Encrypting Passwords
Maven – Password Encryption

离线版Google Chrome Frame下载

Filed under: OS — Jet @ 8:47 上午
原文出处: 离线版Google Chrome Frame下载
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

Google Chrome Frame是Google公司在早些时候推出的一个IE插件,功能是让IE支持Chrome浏览器内核,这个插件一推出就在业内引起了广泛的争议。

但是Chrome Frame官方提供的下载地址都是在线安装版本的,没有离线安装文件,后来Google了一下终于找到了其离线版的下载地址:http://cache.pack.google.com/edgedl/chrome/install/295.0/chromeframe_installer.exe 。不过从下载的地址来看应该是一个临时的,但是我已经下载下来了,安装文件是11.9MB。

下载下来之后可以使用下面的命令来定制安装,参数的含义一看英文就很明白了。

chromeframe_installer.exe –do-not-launch-chrome –do-not-create-shortcuts –do-not-register-for-update-launch –system-level –chrome-frame

Good Luck!

参考资料:

http://code.google.com/p/chromium/issues/detail?id=22733

Apache下FastCGI模块的众多版本

Filed under: OS,Web&Server — Jet @ 8:36 上午
Tags: ,
原文出处: Apache下FastCGI模块的众多版本
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

这两天在Apache上配置以FastCGI方式来加载PHP和Perl,连续花了三天的时间才正式配置好并且稳定了,配置的话到不是很麻烦,关键是配置好之后还要稳定。后续我会将整个过程记录下来给大家分享,今天我要先说的是FastCGI的版本问题。

目前我们在网上能够找到的FastCGI有三个版本:
(1) mod_fastcgi:官方地址是http://www.fastcgi.com/。这个可以说是最初始的FastCGI的版本,可惜的是现在作者已经好久没有维护了,现存编译好的版本非常少,其官方网站更多的是以一个“标准”的姿态出现的。现在给出通过官方网站没法直接找到的两个地址,一个是下载地址http://www.fastcgi.com/dist/,另外一个是相关的配置参数的文档http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html。虽然是官方标准,但是不建议在生产环境中直接使用,因为它特别的不稳定,而且兼容性极差。

(2) mod_fcgid v2.2:官方地址是http://fastcgi.coremail.cn/,不过网站现在打不开了,所幸的是可以在http://www.apachelounge.com/download/网站上下载。fcgid是在fastcgi的基础上进行了扩展和优化,并且针对Apache的新版本做了及时的更新,使得可以在生产环境下使用,二者具体的区别可以阅读下面的参考资料。原来在coremail上所提供的文件因为现在网站没法访问,所以具体的关于ApacheLounge上所提供的mod_fcgid2.2和coremail上所提供的有什么区别我不是很了解。所幸我找到了作者的邮箱,通过跟作者邮件沟通了解到,原来作者在做完第一个版本的fcgid之后就将源代码发布到了网上,后来ApacheLounge的Steffen使用源代码重新在Windows下面编译后发布了可以直接使用的二进制版本的mod_fcgid.so文件。同时,Steffen也是Apache Windows版本的一个维护者。经过试用,我感觉这个版本的mod_fcgid是最适合在Windows环境下使用的。

(3) mod_fcgid v2.3.x +:官方地址为http://httpd.apache.org/mod_fcgid/,相关文档地址为:http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html。这个是目前Apache官方所提供的mod_fcgid,目前最新版本为2.3.4。通过作者了解到,这个是作者将原来放在coremail上的mod_fcgid代码捐献给Apache之后由Apache官方来维护的一个版本,可以说是2.2版本之后的后续版本。但是我在Windows上面使用之后感觉不是很稳定,Apache总是隔一段时间就自动关闭,不知道是我设置的问题还是其他问题。

综合来看,上面三个版本的情况如下:

  • mod_fastcgi:最初始的标准版本,适合开发,不适合直接在生产环境中使用;
  • mod_fcgid v2.2:目前在Apache Lounge上提供下载,个人认为是最适合在Windows环境下使用的一个版本,缺点是因为原来的fastcgi.coremail.cn网站已经不能访问,所以所参考的文档极少;
  • mod_fcgid v2.3.x +:最新最稳定的官方版本,其特点是目前mod_fcgid中最新的版本,而且是有官方来维护,文档内容也非常丰富。但以我个人使用来看,在Windows环境下不是很稳定。
  • 更新(2010.1.8):经过同mod_fcgid原作者Ryan Pan (Pan Qingfeng, pqf or 潘庆峰)沟通,他已经答应将原来在http://fastcgi.coremail.cn/的内容放到本站做镜像,详细说明见http://www.javatang.com/mod_fcgid-v2-2-mirror

    附同mod_fcgid作者沟通的邮件内容(经本人允许):

    庆峰,你好!
    很冒昧的给你发mail,我是mod_fcgid的使用者,有个疑问一直未知,就是关于mod_fcgid版本的问题。我现在在网络上找到三种mod_fcgid的版本:
    (1) 在http://www.apachelounge.com/download/上列出的两个mod_fcgid-2.2b-w32.zip(用于Apache 2.2.9+)和 mod_fcgid-2.2a-w32.zip(用于Apache 2.2.0到2.2.8),作者好像是Steffen。
    (2) 在http://fastcgi.coremail.cn/index.cn.htm(现在无法访问了)上也有一个mod_fcgid,作者的信息我只在ChinaUnix找到一个帖子http://bbs3.chinaunix.net/thread-320106-1-1.html,有人说跟上面的是同一个,但因为网站无法访问,所以没有办法看到。
    (3) 最后一个就是你写的mod_fcgid了,官方地址是http://httpd.apache.org/mod_fcgid/,现在的版本是2.3.4,详细文档地址是http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html。
    因为想在实际的项目中使用mod_fcgid加载PHP,所以还望解答我的疑问,非常感谢!
    顺颂商祺!
    马志勇 (Jet Ma)
    =========================
    Hi, 马先生
    (1)其实是专门维护Windows版Apache的一位外国朋友做的,源代码也是来自标准的mod_fcgid, 不过Steffen维护的是Windows版的编译好的mod_fcgid.so,方便大家直接使用(Windows很多人没有安装编译工具,直接给源代码大家基本上没多少人可以用的上)
    (2) 之前做mod_fcgid的时候,代码和文档一直放在这里的,但是后来代码捐献了给Apache之后,这里就不再维护了,另外最近公司服务器做了一些调整,我也改不了redirect到apache网站了
    (3) 这是当前官方的mod_fcgid, 维护的是最新最稳定的mod_fcgid, Apache软件基金会的程序员(我也是其中之一)正在维护这个项目,如果您有什么问题,可以直接在Apache的邮件列表提出的(不过使用问题最好不要在开发邮件列表提出了)

    Thanks

    参考资料:
    mod_fastcgi和mod_fcgid的区别
    Windows 下 Apache 1.3 以 FastCGI 模式运行 PHP