我使用Gradle - extract file from depended jar的方法从原生JAR中取出.so文件。
configurations {
special
}
dependencies {
special('org.jogamp.jogl:jogl-all:2.3.2:natives-linux-i586')
}
task extract(type: Copy) {
from({ zipTree(configurations.special.singleFile) })
include 'natives/linux-i586/*.so'
into "$buildDir/extracted"
}
这样可以正常工作,但它似乎会破坏依赖于org.jogamp.jogl:jogl-all:2.3.2
(非本机Java部分)的代码编译。
TestJogl.java:1: error: package com.jogamp.opengl does not exist
import com.jogamp.opengl.GL;
如果项目是使用clean extract build
而不是clean build
我已将代码简化为
import com.jogamp.opengl.GL;
public class TestJogl {
private GL gl;
}
和相应的build.gradle
apply plugin: "java"
dependencies {
compile "org.jogamp.jogl:jogl-all:2.3.2"
}
我已将此问题与使用" flatDir
"回购。使用mavenCentral()
时,完全相同的项目编译正常。请注意使用传统企业网络,无需人工或直接访问Internet。
allprojects {
repositories {
flatDir {
dirs "$rootProject.projectDir/local-repo"
// contains jogl-all-2.3.2-natives-linux-i586.jar
// jogl-all-2.3.2.jar
}
}
}
我设法通过将依赖项更改为明确指定@jar
来解决此问题,这应该是隐式的
compile "org.jogamp.jogl:jogl-all:2.3.2@jar"
单项目和多项目布局都会出现同样的问题。
我的分析:这是Gradle中的一个错误。不知何故,使用flatDir Gradle时会感到困惑并认为已经设置了依赖关系,但是使用了原生JAR而不是Java JAR。
问题:我做错了吗?这是一个错误吗?还有其他方法可以解决它吗?
环境:Gradle 3.5,JDK 1.8u144