温馨提示×

CentOS Java编译时依赖如何管理

小樊
42
2025-12-11 20:08:32
栏目: 编程语言

CentOS 上 Java 编译时依赖管理

一 推荐做法 使用构建工具管理依赖

  • 使用 MavenGradle 在项目中声明依赖,构建时自动下载、传递依赖并放入编译 classpath
  • 安装与常用命令示例:
    • 安装工具
      • Maven:sudo yum install -y maven
      • Gradle:可用 SDKMAN 安装(推荐)或 sudo yum install -y gradle
    • 常用命令
      • Maven:mvn compilemvn packagemvn install
      • Gradle:gradle buildgradle run
  • 依赖声明示例
    • Maven(pom.xml)
      <dependencies>
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.33</version>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.13.2</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
      
    • Gradle(build.gradle)
      dependencies {
        implementation 'mysql:mysql-connector-java:8.0.33'
        testImplementation 'junit:junit:4.13.2'
      }
      
  • 说明:构建工具会自动解析传递依赖、去重,并支持 scope/testImplementation 等编译期与测试期依赖隔离。

二 无构建工具时的手动与系统库管理

  • 手动管理 JAR
    • 将第三方 JAR 放入项目 lib/,编译与运行通过 -cp 指定类路径(Linux 下分隔符为“:”,Windows 为“;”)。
    • 示例
      javac -cp "lib/*:." src/main/java/com/example/App.java
      java  -cp "lib/*:." com.example.App
      
  • 使用系统包管理器安装 JDK 与编译所需工具
    • 安装 OpenJDK(开发头文件与工具):sudo yum install -y java-1.8.0-openjdk-devel
    • 如需本地编译原生库或处理本地依赖,可补充安装编译工具链:sudo yum install -y gcc gcc-c++ autoconf libjpeg-devel libpng-devel freetype-devel libxml2-devel zlib-devel glibc-devel openssl-devel
  • 适用场景:遗留项目、教学示例、极简工具脚本等。

三 离线或受限网络环境的依赖管理

  • 内网 YUM
    • 将所需 RPM 包同步到内网仓库,使用 yum localinstall 或配置内网 repo 进行安装,便于统一管理系统与开发依赖。
  • 构建工具离线方案
    • Maven:使用 mvn dependency:go-offline 预先下载依赖,或在有网环境构建并将本地仓库(.m2/repository)拷贝到离线环境复用。
    • Gradle:使用 –offline 参数离线构建,依赖需提前缓存到本地。

四 实践建议与常见注意点

  • 优先选择 Maven/Gradle 管理依赖,避免手工拷贝 JAR 导致版本冲突与难以维护。
  • 明确依赖 scope(如 test),避免测试依赖进入生产打包。
  • 统一 JDK 版本编码(UTF-8),减少跨平台编译差异。
  • CI/CD 中缓存依赖目录(如 ~/.m2~/.gradle/caches)以加速构建。
  • 若使用 Java 9+ 模块系统,可通过 module-info.java 管理模块依赖,并与构建工具配合使用。

0