Skip to content

--package is broken in 4.2.3 - doesn't include stuff in local dependencies #415

@vsajip

Description

@vsajip

I have a simple setup where packaging a script with a local dependency fails, because the local dependency is not included in the package. Here is the project:

$ tree .
.
├── libs
│   └── congocc.jar
└── pkgtest.kts

The script just imports a class in congocc.jar and prints it:

import org.congocc.core.Grammar

println(Grammar::class.java)

which runs fine when invoked like this:

$ KSCRIPT_DIRECTORY_ARTIFACTS=$PWD/libs kscript pkgtest.kts
class org.congocc.core.Grammar

However, packaging it fails:

$ KSCRIPT_DIRECTORY_ARTIFACTS=$PWD/libs kscript -cp pkgtest.kts
Cleaning up cache...
[kscript] Packaging script 'pkgtest' into standalone executable...
[kscript] Packaged script 'pkgtest' available at path:
[ksript] /home/vinay/.cache/kscript/package_9c6421c9540b73cf0ccfbcfd1405be52/build/libs/pkgtest
$ /home/vinay/.cache/kscript/package_9c6421c9540b73cf0ccfbcfd1405be52/build/libs/pkgtest
Exception in thread "main" java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
	at Main_Pkgtest$Companion.main(Main_Pkgtest.kt:6)
	at Main_Pkgtest.main(Main_Pkgtest.kt)
Caused by: java.lang.NoClassDefFoundError: org/congocc/core/Grammar
	at kscript.scriplet.Pkgtest.<init>(Pkgtest.kts)
	... 6 more
Caused by: java.lang.ClassNotFoundException: org.congocc.core.Grammar
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
	... 7 more

This is because the build.gradle.kts is missing the dependency. Here is the relevant portion of build.gradle.kts:

dependencies {
    implementation(files("/home/vinay/.cache/kscript/jar_9c6421c9540b73cf0ccfbcfd1405be52/scriplet.jar"))
    implementation("org.jetbrains.kotlin:kotlin-stdlib")
    implementation("org.jetbrains.kotlin:kotlin-script-runtime:1.7.21")
}

There's no mention of congocc.jar, even though it is contained in the relevant dependencies file:

$ cat ~/.cache/kscript/dependencies_9c6421c9540b73cf0ccfbcfd1405be52/dependencies.content 
/home/vinay/projects/scratch/kscript/libs/congocc.jar

Adding implementation(files("/home/vinay/projects/scratch/kscript/libs/congocc.jar")) manually to the build script and rerunning gradle makeScript solves the problem, so it's just in the construction of build.gradle.kts where the problem seems to be.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions