Skip to content

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

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:

importorg.congocc.core.Grammarprintln(Grammar::class.java)

which runs fine when invoked like this:

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

However, packaging it fails:

$ KSCRIPT_DIRECTORY_ARTIFACTS=$PWD/libs kscript -cp pkgtest.ktsCleaning 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/pkgtestException 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 moreCaused 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