When gradle, with the help of jitpack, builds the JAR, there are dependencies:
thufir@mordor:~/NetBeansProjects/hello_client$
thufir@mordor:~/NetBeansProjects/hello_client$ jar -i build/libs/hello_client.jar
java.io.FileNotFoundException: build/libs/hello_api-dev.jar (No such file or directory)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:219)
at java.util.zip.ZipFile.<init>(ZipFile.java:149)
at java.util.jar.JarFile.<init>(JarFile.java:166)
at java.util.jar.JarFile.<init>(JarFile.java:103)
at sun.tools.jar.Main.getJarPath(Main.java:1163)
at sun.tools.jar.Main.getJarPath(Main.java:1179)
at sun.tools.jar.Main.genIndex(Main.java:1195)
at sun.tools.jar.Main.run(Main.java:317)
at sun.tools.jar.Main.main(Main.java:1288)
thufir@mordor:~/NetBeansProjects/hello_client$
So, I copied the missing file into build/libs
:
thufir@mordor:~/NetBeansProjects/hello_client$
thufir@mordor:~/NetBeansProjects/hello_client$ jar -i build/libs/hello_client.jar
java.io.FileNotFoundException: build/libs/hello_api-dev.jar (No such file or directory)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:219)
at java.util.zip.ZipFile.<init>(ZipFile.java:149)
at java.util.jar.JarFile.<init>(JarFile.java:166)
at java.util.jar.JarFile.<init>(JarFile.java:103)
at sun.tools.jar.Main.getJarPath(Main.java:1163)
at sun.tools.jar.Main.getJarPath(Main.java:1179)
at sun.tools.jar.Main.genIndex(Main.java:1195)
at sun.tools.jar.Main.run(Main.java:317)
at sun.tools.jar.Main.main(Main.java:1288)
thufir@mordor:~/NetBeansProjects/hello_client$
thufir@mordor:~/NetBeansProjects/hello_client/build/libs$
thufir@mordor:~/NetBeansProjects/hello_client/build/libs$ cp /home/thufir/.gradle/caches/modules-2/files-2.1/org.codehaus.groovy/groovy-all/2.4.1/a9ca9c9de09361ec2a18d2c058d2524fbd8eae0c/groovy-all-2.4.1.jar hello_api-dev.jar hello_client.jar .
cp: ‘hello_api-dev.jar’ and ‘./hello_api-dev.jar’ are the same file
cp: ‘hello_client.jar’ and ‘./hello_client.jar’ are the same file
thufir@mordor:~/NetBeansProjects/hello_client/build/libs$
thufir@mordor:~/NetBeansProjects/hello_client/build/libs$ jar -i hello_client.jar
thufir@mordor:~/NetBeansProjects/hello_client/build/libs$
thufir@mordor:~/NetBeansProjects/hello_client/build/libs$ ll
total 6816
drwxrwxr-x 2 thufir thufir 4096 Mar 11 03:41 ./
drwxrwxr-x 6 thufir thufir 4096 Mar 11 03:30 ../
-rw-rw-r-- 1 thufir thufir 6937913 Mar 11 03:41 groovy-all-2.4.1.jar
-rw-rw-r-- 1 thufir thufir 1422 Mar 11 03:39 hello_api-dev.jar
-rw-rw-r-- 1 thufir thufir 2722 Mar 11 03:41 hello_client.jar
thufir@mordor:~/NetBeansProjects/hello_client/build/libs$
thufir@mordor:~/NetBeansProjects/hello_client/build/libs$ java -jar hello_client.jar
hello [fred]
thufir@mordor:~/NetBeansProjects/hello_client/build/libs$
How do I build hello_client.jar
so that hello_api-dev.jar
is also there, so that client won’t crash? Ideally, I would want gradle to include any JAR’s marked as runtime dependencies in the build directory.
Is this a correct, or normal practice? Why or why not?
My current build file:
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'maven'
mainClassName = 'net.bounceme.mordor.hello.client.HelloClient'
sourceCompatibility = '1.8'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
if (!hasProperty(mainClassName)) {
ext.mainClass = mainClassName
}
repositories {
mavenCentral()
maven { url "https://jitpack.io" }
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.10'
compile 'com.github.THUFIR:hello_api:dev'
}
jar {
manifest {
attributes ('Main-Class': mainClassName,
"Class-Path": configurations.compile.collect { it.getName() }.join(' '))
}
}
assemble.dependsOn (jar)
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
for these repos: