整合两个工程遇到的小问题~记录一下

本文记录了在整合userservice和userope两个项目时遇到的问题,主要涉及Struts2的配置冲突及jar包重复引入导致服务器无法启动的情况,并提供了具体的解决办法。

记录一下这个新的内容:整合两个项目过程中需要注意的问题(仅仅限于我这些小内容啦~)

有两个工程,一个是对外发布webservice的名为userservice的工程,另一个是以前做过的一个普通工程,名为userope。

要求将userope工程的功能整合到userservice工程中,其中,两个工程用的数据库一样,而且都用了hibernate;userope用了dwr、struts2、fitter。

两个整到一起,肯定有些重复的,有些冲突的,比如说jar包。在整合过程中,遇到两个比较典型的问题,两个问题都导致服务器没有办法启动,记录下来:

一、struts2:严重: Exception starting filter struts2

具体错误是:

Code:
  1. 严重:Exceptionstartingfilterstruts2
  2. Unabletoloadbean:type:class:com.opensymphony.xwork2.ObjectFactory-bean-jar:file:/C:/Tomcat%206.0/webapps/userservice/WEB-INF/lib/struts2-core-2.1.8.1.jar!/struts-default.xml:29:72
  3. atcom.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:208)
  4. atorg.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
  5. atcom.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:131)
  6. atcom.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)
  7. atorg.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395)
  8. atorg.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452)
  9. atorg.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:205)
  10. atorg.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
  11. atorg.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
  12. atorg.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
  13. atorg.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3838)
  14. atorg.apache.catalina.core.StandardContext.start(StandardContext.java:4488)
  15. atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
  16. atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
  17. atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
  18. atorg.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
  19. atorg.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
  20. atorg.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
  21. atorg.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
  22. atorg.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
  23. atorg.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
  24. atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
  25. atorg.apache.catalina.core.StandardHost.start(StandardHost.java:722)
  26. atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
  27. atorg.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
  28. atorg.apache.catalina.core.StandardService.start(StandardService.java:516)
  29. atorg.apache.catalina.core.StandardServer.start(StandardServer.java:710)
  30. atorg.apache.catalina.startup.Catalina.start(Catalina.java:593)
  31. atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
  32. atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  33. atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  34. atjava.lang.reflect.Method.invoke(Method.java:597)
  35. atorg.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
  36. atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
  37. Causedby:Beantypeclasscom.opensymphony.xwork2.ObjectFactorywiththenamexworkhasalreadybeenloadedbybean-jar:file:/C:/Tomcat%206.0/webapps/userservice/WEB-INF/lib/struts2-core-2.0.14.jar!/struts-default.xml:30:72-bean-jar:file:/C:/Tomcat%206.0/webapps/userservice/WEB-INF/lib/struts2-core-2.1.8.1.jar!/struts-default.xml:29:72
  38. atcom.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:193)
  39. ...33more
  40. 2011-2-2316:58:10org.apache.catalina.core.StandardContextstart
  41. 严重:ErrorfilterStart
  42. 2011-2-2316:58:10org.apache.catalina.core.StandardContextstart
  43. 严重:Context[/userservice]startupfailedduetopreviouserrors
  44. 2011-2-2316:58:10org.apache.catalina.loader.WebappClassLoaderclearReferencesJdbc
  45. 严重:AwebapplicationregisteredtheJBDCdriver[com.mysql.jdbc.Driver]butfailedtounregisteritwhenthewebapplicationwasstopped.Topreventamemoryleak,theJDBCDriverhasbeenforciblyunregistered.
  46. 2011-2-2316:58:10org.apache.catalina.loader.WebappClassLoaderclearThreadLocalMap
  47. 严重:AwebapplicationcreatedaThreadLocalwithkeyoftype[null](value[com.sun.faces.config.ConfigureListener$1@33aa44])andavalueoftype[null](value[null])butfailedtoremoveitwhenthewebapplicationwasstopped.Topreventamemoryleak,theThreadLocalhasbeenforciblyremoved.


仔细一检查,jar有冲突,lib里面有两个,一个是struts2-core-2.1.8.1.jar,一个是struts2-core-2.0.14.jar。

解决办法肯定是将其中一个删除,但是,删除哪个取决于jar包都是哪些。我的工程是要删除struts2-core-2.1.8.1.jar。

二、The package location package is already been used by another package at location package

这个错误的原因是,一个jar包用了两次,我的工程整合的时候错误在于:一次将struts2 jar包复制到了lib下,又一次在myeclipse里面又一次导入了struts2 jar包,同样,删除其中一个就行了。

最后,想提醒一下的是:整合后注意链接是否改好了。

<think> 我们正在讨论原生微信小程序分包功能。根据微信官方文档,分包是一种优化小程序加载速度的技术,允许开发者将小程序划分为多个子包,在需要时按需加载。 首先,我将简要介绍分包的概念和优势,然后详细说明使用方法(包括配置和代码示例),最后列举重要注意事项。 注意:所有技术术语和代码块需正确格式化,并在适当位置添加引用标识。 </think> ### 原生微信小程序分包指南 #### 一、分包介绍 分包是小程序优化的重要手段,允许开发者将小程序拆分成多个子包: 1. **主包**:包含启动页面、公共资源、核心逻辑等必需内容,大小上限**2MB** 2. **子包**:按功能划分的独立模块(如商品模块/用户中心),大小上限**20MB** ```text 小程序结构示例: ├── app.js (主包入口) ├── pages/ (主包页面) ├── subpackages/ │ ├── packageA/ (子包A) │ │ ├── pages/ │ │ └── components/ │ └── packageB/ (子包B) ``` **核心优势**: - **启动优化**:减少首屏加载时间[^1] - **突破体积限制**:总包大小可扩展至**20MB**(主包+所有子包) - **按需加载**:非核心功能延迟加载(如电商的商品详情页) - **团队协作**:不同团队可独立开发子包 #### 二、使用方法 ##### 1. 配置分包(app.json) ```json { "pages": [ "pages/index/index", "pages/logs/logs" ], "subpackages": [ { "root": "subpackages/shop", "name": "shop", "pages": [ "pages/goods/list", "pages/goods/detail" ] }, { "root": "subpackages/user", "pages": [ "pages/profile/index", "pages/settings/index" ] } ] } ``` - `root`:子包根目录(必填) - `name`:子包别名(选填) - `pages`:子包页面路径(相对于root) ##### 2. 分包预加载 在app.json中添加预加载配置: ```json "preloadRule": { "pages/index/index": { "network": "wifi", "packages": ["subpackages/shop"] } } ``` 当访问首页时自动预加载shop子包[^2] ##### 3. 分包跳转 使用`wx.navigateTo`跳转子包页面: ```javascript wx.navigateTo({ url: '/subpackages/shop/pages/goods/detail?id=123' }) ``` #### 三、注意事项 1. **目录规范** - 子包内不能包含主包资源 - 子包**不能嵌套**(不支持子包的子包) 2. **资源引用限制** - 主包可引用所有子包资源 - 子包**不能引用其他子包**的资源 - 公共组件建议放在主包 3. **体积管控** ```mermaid graph LR A[小程序总包] --> B(主包 ≤2MB) A --> C(子包A ≤20MB) A --> D(子包B ≤20MB) ``` 4. **特殊文件位置** - `app.js`/`app.json`/`app.wxss` 必须在主包 - `tabBar`页面必须在主包 5. **插件兼容** - 插件代码不计入分包大小 - 但插件自身资源需遵循相同引用规则 > 最佳实践:将使用频率低于20%的页面(如订单追踪/客服中心)放入子包,高频功能保留在主包[^3] --- ### 相关问题 1. 如何解决分包后公共组件复用问题? 2. 分包预加载策略有哪些优化技巧? 3. 小程序分包与独立分包有什么区别? 4. 分包后如何监控各子包的加载性能? [^1]: 微信官方文档:分包加载原理 [^2]: 微信开发者工具预加载配置说明 [^3]: 小程序性能优化白皮书第3章
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值