IDEA集成Resin启动Maven项目
前言
目前公司大部分的项目都是基于JDK1.6,使用Eclipse开发的。不过我还是想在IDEA上进行开发,用着比较顺手。但是在尝试使用IDEA启动公司项目的过程中遇到了很多问题。在不断尝试下,终于一一解决,特在此记录,以防遗忘。
环境说明
名称 | 版本 |
---|---|
项目JRE | 1.6 |
maven | 3.2.5 |
maven jre | 1.6 |
Resin | 3.0.28 |
IntelliJ IDEA | 2019.1.2 |
所遇到的各种坑
IDEA如何与resin集成
先来说一说在Eclipse中是如何配置的。
之前一直都是用的tomcat,resin算是刚接触。公司对于resin的配置采用项目对应其特有配置文件的形式进行web容器初始化的。比如,resin默认的配置文件为resin.xml,当resin启动时自身会读取该xml中相关的集群配置、数据源配置、工作目录配置等等。
在resin与Eclipse的集成过程中,是通过定义主启动函数,并设置其相关参数来进行初始化启动的。示例如下:
添加Java Application
点击debug按钮右侧的小箭头,右键左侧菜单中的Java Application,选择new。
启动配置
Main选项卡
在右侧新的窗口中,点击第一行Project文本框右侧的***Browse…***按钮,选择需要进行部署的项目。
在第二行Main Class文本框中输入
com.caucho.resin.Resin
,指定主启动函数。下面的三个复选框可以忽略。
Arguments选项卡
在第一个Program arguments文本框中,指定项目所用的Resin配置文件。
在第二个配置文件中指定Resin的home目录、日志实现以及相关jvm参数配置。
至此,Eclipse与Resin的集成就完成了。
但是,软件不一样,很多菜单的配置、软件的默认参数都不一样。比如,并没有要求配置Main Class以及Resin Home。
网上对于IDEA与Resin的集成方法文章较少,照抄是不太现实了,中间遇到了很多报错无法启动。只有自己摸索,不断尝试。具体的操作步骤见操作步骤章节中的Resin相关配置。
Maven版本–JDK版本–AspectJ版本之间出现的问题
这块内容尝试了很长时间,如需最终结论,请看本段最后。
Maven版本与JDK版本
最开始,我的windows环境中安装了两种JDK版本,分别为1.6与1.8。我将JAVA_HOME设置为1.8,然后在拉完项目后,将项目运行环境以及编译环境(Eclipse中的Compiler)设置为1.6。
IDEA的Project Structure->Project选项卡->Project SDK设置为1.6。但发现此时maven无法clean install,因为我的maven使用的是3.3.6版本,并不支持JDK1.6。
经过查找,我在IDEA的maven设置中找到可以设置maven自身的运行环境。点击设置中Maven下的Runner选项卡,将JRE调整为了1.8(默认跟随项目jdk版本,所以不调整就是1.6)。
至此项目至少是可以clean install了。但却发生了下面的问题,见JDK版本–AspectJ版本。
JDK版本–AspectJ版本
在集成完成后,出现了这样的报错:
1
org.aspectj.apache.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 18
经过查找资料,得知是aspectj版本过低的原因导致。可我项目已经配置了1.6的jre了啊?奇了怪了。我详细查看了AspectJ的报错日志,发现了问题所在。其中有一行是:
1
sun.boot.library.path=C:\Program Files\Java\jdk1.8.0_112\jre\bin
原来在AspectJ进行编译的时候,读取的还是系统环境变量中的JAVA_HOME啊。找到了问题所在,便想从IDEA的项目环境配置入手,可是找了半天还是没找到如何给AspectJ配置环境变量。
最终解决思路
由于AspectJ的限制,所以决定更换系统的JAVA_HOME为1.6的路径。maven也更换为支持jdk1.6的3.2.5版本。IDEA项目中无论是project sdk还是maven的runner等等,都更换为了1.6。终于,项目能够正常打包,AspectJ也可以正常编译了。
操作步骤
Resin相关配置
如mic,对应resin/conf目录下的mic-site.conf文件
修改启动端口
1 | <!-- 修改port --> |
修改compiling-loader
1 | <host-default> |
修改工作空间目录
1 | <host id="" root-directory="."> |
IDEA相关配置
新建Resin配置界面
Server选项卡
先来个总图,大概长这样。
配置Application Server
选择Application Server右侧的***Configure…***按钮,打开其配置界面。
设置Resin Home为本地Resin所在目录,并勾选Include all resin JARs复选框。
设置Default resin configuration file,定义默认的Resin配置文件。
点击OK完成配置。
设置VM options
这里经过测试,不设置resin_home也是可以的,应该是idea会根据之前的配置自动读进去。
1 | -Djava.util.logging.manager=com.caucho.log.LogManagerImpl |
设置JRE
这里当然选择1.6
设置Resin configuration template
这里定义自己需要配置的自定义启动文件。如:
注意!,下面有一个复选框,叫做Do not alter Resin configuration
这里一定要勾上,亲测如果不勾会读不到上面的配置文件。
添加compiler output目录到classpath
如果不勾选Include compiler output and libraries on classpath,则会出现类似以下的报错信息:
1 | java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter |
一定要勾上这个复选框。
端口及字符集配置
如果上面勾选了Do not alter Resin configuration,那么无论这里设置什么http端口,都是以配置文件为准。
JMX port需要每个应用设置的不一样。
charset根据需要进行配置。
Deploy mode设置为automatic即可。
Deployment选项卡
添加所需要发布的Artifact
Deployment method需要修改为resin.xml。
JMX是把项目打包的文件 放在resin服务器下webapp下 只有在服务器启动时 才把项目给拷贝过去 无法在intellij中实时更新。
resin.xml是在C盘C:\Users\xxx\AppData\Local\Temp目录下 copy了一份resin.xml的配置文件 然后把服务器目录空间指向了你的项目工作空间 可以实现intellij修改实时更新
去掉***Use default context name(always true if deployment method is JMX)***的复选框。
Application context name 保持默认/
不变。
至此,项目已经可以正常启动了。
小结
由于算是初次的尝试,没有现有实例可供参考,难免会有错误,所以开发过程中一定还会遇到各种问题。但我相信,路都是一步步走出来的,如有问题,恳请指出。