您的位置:首页 > 其它

IDEA中文项目问题解决小记

2013-07-14 16:53 357 查看
公司的WEB项目是GBK编码的,组里基本上都是用eclipse的,IDEA中碰到的很多问题都要重新去解决。

1. 输出乱码问题

先倒不提代码中输出的中文了,编译、mvn build以及tomcat日志都有乱码。网上搜了一下,比较靠谱的是:
http://www.kafeitu.me/tools/2013/03/26/intellij-deal-chinese-disorderly-code.html
这里提到的解决方案。这个方案基本上能够解决IDEA的乱码问题,除了在调用autoconfig的时候还是会输出乱码,这时还是需要在pom文件中指定一下maven-autoconfig-plugin的编码。默认是没有指定的,这样它会用系统默认的,如果LC_ALL环境变量为空,那就会使用MacRoman,显然这对中文输出是有问题的。修改pom后如下:

<plugin>
<groupId>com.alibaba.citrus.tool</groupId>
<artifactId>maven-autoconfig-plugin</artifactId>
<version>1.0.9</version>
<configuration>
<exploding>true</exploding>
<explodedDirectory>
${warExplodedDirectory}
</explodedDirectory>
<charset>GBK</charset>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>autoconfig</goal>
</goals>
</execution>
</executions>
</plugin>
这样就能完美地解决build以及tomcat的输出了。

不过在iTerm2中手动调mvn build,输出还是有乱码。无解。。。

2. IDEA中使用maven的问题

这个不知道是不是我IDEA没配置好。maven默认是已经集成在IDEA中的,但是在打包项目时,却报找不到maven,并提示设置M2_HOME环境变量,错误信息如下:

IDEA [FATAL_ERROR] Cannot start Maven: No valid Maven installation found

这个问题在stackoverflow上也有记录:http://stackoverflow.com/questions/8221587/intellij-cant-find-my-m2-home-why-is-that

我先在~/.zshrc中设置export M2_HOME=/usr/share/maven,但是没有用。后来上网查了一下,说mac的shell环境变量,未必能够被GUI应用程序读到。于是按照
http://www.dowdandassociates.com/content/howto-set-an-environment-variable-in-mac-os-x-slash-etc-slash-launchd-dot-conf/
这篇文章讲的,把环境变量加到了/etc/launched.conf中(需要重启)。这样就能使用maven build了。

3. autoconfig的配置值注入问题

关于autoconfig,见这里:http://openwebx.org/docs/autoconfig.html

项目使用了maven filtering来配置autoconfig,配置如下:

<build>
<finalName>my_project_name</finalName>
<filters>
<filter>${user.home}/antx.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
......
结果是,项目中一部分xml文件的placeholder值被替换了,另一部分却没有。

刚开始以为是maven版本导致的问题,因为我本机用的是maven 3.0,而公司服务器上的是maven 2.1。网上搜了一下,3.0倒确实有一个因为注释中出现了“@"符号而导致这个文件的值没法被替换的情况。不过看了下项目中,并没有这个特殊符号,排除了这个问题。

后来师兄在看日志输出的时候发现一行:

[WARNING] Using platform encoding (MacRoman actually) to copy filtered resources, i.e. build is platform
dependent!

看起来有可能是编码的问题,这个问题,stackoverflow中给的方案是,在pom中将project.build.sourceEncoding设为确定的编码。

我用的是另外一种方案:添加maven-resources-plugin,并指定编码,具体如下:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<encoding>GBK</encoding>
</configuration>
</plugin>


这个问题之所以没有在服务器上重现,是因为公司的web服务器的系统编码都已经设置成了GB18030,直接把这个问题给规避掉了,汗。。。

4. 一些杂项

问题2讲到了用maven,这个项目中使用maven,其实是在Run --> Edit Configurations里的,也就是说配置web项目的启动选项的时候指定的。因为pom文件里配置了一些特殊的goal如使用autoconfig打包配置等。

因为应用是使用tomcat的,所以在Edit Configurations,首先要添加一个tomcat6的server。具体过程见这篇文章:
http://my.oschina.net/tsl0922/blog/94621
这时最下面有一个Before launch的选项,默认是只选make的,因为我们项目是使用maven的,所以还需要选中"Run Maven Goal”,然后指定一下具体的web项目以及maven的lifecycle(一般至少是package,可以选install)。

这里的VM parameters,就涉及到了问题1的编码问题,需要添加-Dfile.encoding=UTF-8参数。如果应用需要较多内存,可能还需要调整内存。

还有一个问题是,这里的maven是不能指定参数的。而我们build项目时,并不希望maven来运行unit tests。没办法,只好改pom文件,添加一个maven-surefire-plugin。具体如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<skipTests>${skipTests}</skipTests>
</configuration>
</plugin>
其中skipTests是在properties段中配置的:
<properties>
<skipTests>true</skipTests>
</properties>
这样就变成默认是不运行UT的了。

总体经验就是,mac用户真心不容易啊,各种小白鼠各种踩坑。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: