web項目打包后依賴module是如何存在的

本文探讨了Maven在处理多模块项目时的打包机制,特别是common-model与业务模块如device-manage之间的依赖关系。通过实验发现,Maven打包时会将common-model模块完整打包进业务模块的lib目录,即使业务模块仅使用了部分类。这一过程揭示了Maven打包的非智能特性,以及其对性能的实际影响微乎其微。

为什么写这个问题

今天在做架构设计时,出现了一个疑问,参考项目结构

这是一个工程下的两个module,其中common-model是公共model类,device-manage是一个业务模块,可以单独发布,后续还会有order-manage业务模块。他们都会共用common-model模块中的类。

这块产生一个疑问,当我发布 device-manage模块时,common-model中的类是都跟着device-manage模块一同发布,还是仅发布跟device-manage模块有关的类呢?带着这个疑问,做一个测试。

需要知道的

我使用的是idea编辑器,使用maven管理工程。当在maven的pom文件中没有如下声明时,

<packaging>war</packaging>

会默认打包为jar包。就是说maven执行package命令,默认打包成jar,

只有声明为war时,才会发布成war包,

war包是放在tomcat目录下用于发布web项目,jar包是供其他模块调用的。

知道了这些后我们就可以看下上边的工程结构

common-model是供其他模块调用的,保证是打包成jar的形式

device-manage是需要发布的web应用程序,所以是打包成war的形式。

测试

通过上边的分析,现将两个模块分别设置为jar和war的形式。

然后通过maven package命令 对两个模块分别打包。

查看device-manage模块下target文件夹,发现common-model是以jar的形式存在于device-manage模块下的lib目录中。

查看common-model.jar的目录发现,所有的类都被打包进去了。

看来自己想的太多了,现有的打包方式没那么智能。

虽然这块是全部打包了,但影响不大,无非就是多占用一点空间,虚拟机用到哪些类才会加载哪些类。不会影响性能。

当然这里还有一点需要注意,就是common-model依赖的所有jar包,都会被打包到device-manage模块下lib目录里。

总结

这篇文章算是对自己疑问的一个测试吧。所以说,这个公共model模块,可以把所有业务模块的model放在这里。不影响性能。

为了方便区分业务,可以把各个业务的model按照文件夹存放。当然,也可以只拎出公共model,非公共model都放在各自的业务模块中。这有一个缺点,就是假如后期有业务变更,还需将model再拎出来。

<think> 我们正在解决Unity进行Web打包时显示"No web module loaded"的问题。根据引用[3]:当在Web Player环境下使用System.IO.File.ReadAllText时,会因沙箱安全限制导致错误。但"No web module loaded"错误通常与Unity WebGL模块未正确安装或项目设置有关。 可能原因及解决方案: 1. **未安装WebGL构建支持模块**:在Unity Hub中,检查当前Unity版本是否安装了WebGL构建支持。若未安装,需添加模块。 - 打开Unity Hub -> 选择安装的Unity版本 -> 点击“添加模块” -> 勾选“WebGL Build Support” -> 完成安装。 2. **构建平台未切换**:在Unity编辑器中,需将构建平台切换到WebGL。 - 打开菜单 File -> Build Settings -> 选择WebGL平台 -> 点击“Switch Platform”。 3. **构建目标设置问题**:在Build Settings中,确保选择了正确的场景并正确配置了WebGL设置。 - 检查场景列表,确保需要构建的场景被添加。 - 点击“Player Settings” -> 在Inspector窗口中检查WebGL相关设置,如分辨率、内存大小等(引用[2]提到内存设置,但此错误通常与安装和平台设置更相关)。 4. **项目设置问题**:检查Player Settings中的WebGL设置。 - 在Player Settings中,找到Publishing Settings,确保“Enable Exceptions”设置为一个合适的选项(如“Full Without Stacktrace”或“Full”),以便在浏览器中获取更详细的错误信息。 5. **重新安装Unity(极端情况)**:如果上述步骤无效,可能是Unity安装损坏,尝试重新安装Unity并确保勾选WebGL模块。 操作步骤示例: 1. 打开Unity Hub,选择对应项目使用的Unity版本,点击右侧齿轮图标选择“添加模块”。 2. 在弹出窗口中勾选“WebGL Build Support”,点击“完成”并等待安装。 3. 重新打开Unity项目,在Build Settings中切换平台到WebGL,然后构建。 如果问题仍然存在,请检查Unity编辑器日志(通常位于~/Library/Logs/Unity on Mac或%APPDATA%\Local\Unity\Editor on Windows)以获取更详细的错误信息。 引用[5]提到技术挑战,但与本问题关联不大。 注意:引用[1]和[4]分别涉及WebGL运行时的错误和上传WebGL构建到服务器的步骤,与当前问题关系不直接。 因此,核心解决步骤是确保WebGL模块安装和平台切换。 </think>### Unity Web打包显示"No web module loaded"的解决方案 当Unity进行Web打包时出现"No web module loaded"错误,通常意味着构建环境缺少WebGL模块支持或配置不当。以下是分步解决方案: --- #### **1. 验证WebGL模块安装** 在Unity Hub中检查WebGL构建模块是否已正确安装: - 打开Unity Hub → 选择安装版本旁的"⋮"图标 → "添加模块" - 勾选**WebGL Build Support**组件(包含必要工具链) - 完成安装后重启Unity[^3] ![Unity WebGL模块安装示意图](https://example.com/webgl-module-install.png) *图:Unity Hub中的WebGL模块安装界面* --- #### **2. 切换构建平台** 确保当前构建平台已设置为WebGL: ```csharp // 通过编辑器脚本验证平台 if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.WebGL) { EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.WebGL, BuildTarget.WebGL); Debug.Log("已切换到WebGL平台"); } ``` - 手动操作:**File > Build Settings > 选择WebGL > Switch Platform**[^2] --- #### **3. 检查内存配置** WebGL内存限制可能导致模块加载失败: 1. 在Player Settings中: - **Publishing Settings > Memory Size**(建议初始设置为256MB) - 启用**Enable Exceptions**(选择`Full`模式) 2. 在index.html模板中添加手动配置: ```html <script> var Module = { TOTAL_MEMORY: 268435456 // 256MB }; </script> ``` 若需更大内存需在Unity中修改后重新构建[^2] --- #### **4. 处理安全沙箱限制** WebGL的沙箱安全限制可能阻止模块加载: - 避免使用`System.IO`命名空间中的文件操作(如`File.ReadAllText`) - 改用`Application.persistentDataPath`和`WWW`类进行数据读写: ```csharp IEnumerator LoadData() { string path = Path.Combine(Application.persistentDataPath, "data.json"); WWW www = new WWW("file://" + path); yield return www; Debug.Log(www.text); } ``` --- #### **5. 清理并重建项目** ```mermaid graph LR A[删除Library文件夹] --> B[关闭Unity] B --> C[删除项目Temp文件夹] C --> D[重启Unity] D --> E[重新导入Assets] ``` 1. 删除项目中的`Library`和`Temp`文件夹 2. 执行菜单:**Assets > Reimport All** 3. 重新构建前执行:**Edit > Clear All** --- #### **6. 更新Unity版本** 旧版本存在已知的WebGL模块兼容性问题: - 推荐使用**LTS(长期支持)版本**(如2022.3+) - 检查更新:**Help > Check for Updates** > **验证修复**:成功构建后查看控制台输出应包含: > `WebGL module initialized successfully [Build: 2022.3.6f1]` --- #### 典型错误日志分析 若仍出现错误,检查浏览器控制台(F12): - **模块未加载**:`Failed to load WebGL module` - **内存不足**:`Could not allocate memory` - **依赖缺失**:`Missing WebAssembly support` 根据错误类型调整内存配置或升级浏览器[^1][^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值