1. 一个项目内,不想代码重复的时候,靠 import 复用 2. 多个项目间,不想代码重复的时候,只能靠 Jar 包了,另外也可以保护 Jar 包中的代码,不被别人随意修改。 Spring Boot 在打包部署的时候打包成 jar 和 war 有什么不同? - 皮蛋 XXXXL 的回答 - 知乎 https://www.zhihu.com/question/283746123/answer/2046064283 ## 为啥这个项目只有src/test/resources/logback.xml下面有 logback 的配置,main下面没有? ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F09%2F14%2F15-23-14-f890f86fe674ef7f2cd9313df34123f7-202409141523572-4647bf.png) 明白了,这是一个被其他项目引用的 jar 包。这种情况下,只在 `src/test/resources` 下有 `logback.xml` 是很常见且合理的做法。让我解释一下原因: 1. 测试独立性: - `src/test/resources` 下的 `logback.xml` 只用于这个 jar 包自身的单元测试和集成测试。 - 这确保了在运行测试时可以有特定的日志配置,而不会影响到使用这个 jar 包的其他项目。 2. 避免配置冲突: - 如果在 `src/main/resources` 中也包含 `logback.xml`,它会被打包到最终的 jar 中。 - 这可能会导致使用这个 jar 包的项目在类路径上有多个 `logback.xml`,造成配置冲突。 3. 灵活性: - 不在主资源中包含日志配置,允许使用这个 jar 包的项目自由配置自己的日志策略,而不被这个库的配置所限制或影响。 4. 关注点分离: - 作为一个库或组件,它应该专注于提供功能,而将日志配置的决定权留给使用它的应用程序。 5. 测试专用配置: - 测试时可能需要更详细的日志输出,`src/test/resources` 下的配置允许在不影响实际使用时进行更详细的日志记录。 6. 最小依赖原则: - 不包含主日志配置有助于减少这个 jar 包对特定日志实现的依赖,使其更加通用。 建议: - 确保这个 jar 包中的代码使用 SLF4J 或其他日志门面接口进行日志记录,而不是直接依赖于特定的日志实现。 - 在这个 jar 包的文档中,清楚地说明它使用的日志框架和任何相关的配置建议,以便使用者正确配置日志。 - 如果这个 jar 包需要在某些情况下输出特定的日志信息,考虑提供编程方式的日志配置选项,而不是依赖于配置文件。 总的来说,这种设置是很好的实践,它保持了库的灵活性和可用性,同时仍然为其自身的测试提供了必要的日志配置。 ## 构建一个 JAR 包时,需要注意以下几个关键方面 1. 依赖管理: - 使用依赖管理工具(如Maven或Gradle)来管理外部库依赖。 - 仔细考虑哪些依赖应该被标记为 "provided" 或 "compile",避免不必要的传递依赖。 - 使用依赖范围(scope)来区分编译时、运行时和测试时依赖。 2. 版本控制: - 为JAR包使用语义化版本号(Semantic Versioning)。 - 在 `pom.xml` 或 `build.gradle` 中明确指定版本号。 3. 打包配置: - 确保 `logback.xml`0 文件包含正确的信息(如版本、构建日期等)。 - 如果JAR是可执行的,指定正确的 Main-Class。 - 考虑是否需要打包源代码(source JAR)和JavaDoc。 4. 资源文件: - 确保必要的配置文件、属性文件等被正确包含在JAR中。 - 避免包含敏感信息或环境特定的配置。 5. 测试: - 包含单元测试和集成测试,确保在不同环境下JAR包可以正常工作。 - 考虑使用测试覆盖率工具来评估测试的完整性。 6. 文档: - 生成和包含JavaDoc。 - 提供清晰的README文件,说明JAR包的用途、如何使用、配置选项等。 7. 许可证: - 清楚地指明JAR包的许可证信息。 - 确保遵守所有使用的第三方库的许可条款。 8. 兼容性: - 明确支持的Java版本范围。 - 考虑向后兼容性,避免不必要的破坏性变更。 9. 安全性: - 避免在JAR中包含敏感信息或硬编码的凭证。 - 考虑使用安全扫描工具检查潜在的漏洞。 10. 日志处理: - 使用日志门面(如SLF4J)而不是具体实现,增加灵活性。 - 不要在JAR中包含具体的日志配置文件。 11. 模块化: - 如果针对Java 9+,考虑是否需要使用Java模块系统(JPMS)。