Gradle技术问询:如何添加Linux服务器文件系统中的Jar依赖
解决Gradle项目引用Linux服务器本地Jar的问题
核心逻辑
Gradle构建是在你的Windows开发机上执行的,根本访问不到Linux服务器的文件系统,所以构建阶段别碰这个Jar,只在Linux服务器运行时加载它才是可行的路子。
具体操作步骤
1. 调整Gradle构建脚本,避免编译依赖该Jar
在build.gradle(或build.gradle.kts)里,不要把这个Linux路径的Jar加到编译依赖里,只标记为运行时依赖,而且不让它参与打包:
// Groovy 写法 dependencies { // 项目本地lib目录下的Jar正常引入 implementation fileTree(dir: 'lib', include: ['*.jar']) // 占位声明运行时依赖,不指定本地路径 runtimeOnly files() } // 打包时排除这个Jar,避免冗余 jar { exclude 'xxx.jar' }
// Kotlin 写法 dependencies { implementation(fileTree(mapOf("dir" to "lib", "include" to listOf("*.jar")))) runtimeOnly(files()) } tasks.jar { exclude("xxx.jar") }
2. Linux服务器上配置运行时类路径
部署到Linux后,通过启动脚本让JVM加载服务器上的Jar:
方法一:修改启动脚本
写一个shell启动脚本,把Jar的服务器本地路径加到类路径里:java -cp "你的应用.jar:/服务器上的Jar路径/xxx.jar" com.你的包名.主类名如果用Gradle的
application插件生成了启动脚本,直接修改服务器上build/install/你的应用名/bin/你的应用名脚本,把Jar路径加到CLASSPATH变量中就行。方法二:启动时指定类路径参数
启动命令里直接用系统属性指定:java -Djava.class.path="你的应用.jar:/服务器上的Jar路径/xxx.jar" com.你的包名.主类名
3. 本地开发的兼容处理
要是本地开发需要用这个Jar的类(不然编译报错),可以临时把Jar复制到Windows本地的lib目录,开发完再删掉;或者在build.gradle里加个仅本地生效的依赖:
// Groovy 写法 configurations { devOnly } dependencies { devOnly files('本地临时存放的Jar路径/xxx.jar') } // 让本地编译时能找到这个Jar sourceSets.main.compileClasspath += configurations.devOnly
这样本地编译没问题,打包时不会带这个Jar,部署到Linux再用服务器路径加载。
内容的提问来源于stack exchange,提问作者Home of Creation
相关产品推荐
相关产品推荐

