IDEA中文项目问题解决小记

本文记录了在IDEA中处理GBK编码项目遇到的问题,包括编译、mvn build及Tomcat日志乱码的解决方法,如何配置maven环境,以及autoconfig配置值注入的问题。解决方案涉及到修改pom文件、设置环境变量、添加maven-resources-plugin等。此外,还提到了IDEA中使用maven和配置Tomcat启动选项的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司的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用户真心不容易啊,各种小白鼠各种踩坑。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值