Script require failed when running main.js

Enonic version: Enonic XP 7.7.3
OS: Pop!_OS 20.04 LTS

I’m having some errors when starting my application:
In my main.js file src/main/resources/main.js, I import some of Enonic’s libs, such as http-client, context, content, and task. But then I get the following error messages:

java.util.concurrent.CompletionException: com.enonic.xp.resource.ResourceProblemException: Script require failed: [myProjectName:/lib/http-client.js]

Even though my build.gradle includes http-client as a dependency.

Can you share more code? How do you include dependencies in build.gradle? How do you require them in your code?

I have the same error. Now using the latest enonic version (7.15.3). The feature works perfectly even with this error.

java.util.concurrent.CompletionException: java.lang.RuntimeException: Script require failed: [myProject:/lib/xp/node.js]
    at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315)
    at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320)
    at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:649)
    at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:833)
 Caused by: java.lang.RuntimeException: Script require failed: [myProject:/lib/xp/node.js]
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.executeRequire(ScriptExecutorImpl.java:139)
    at com.enonic.xp.script.impl.function.RequireFunction.call(RequireFunction.java:31)
    at org.openjdk.nashorn.internal.runtime.linker.JSObjectLinker.jsObjectScopeCall(JSObjectLinker.java:254)
    at org.openjdk.nashorn.internal.scripts.Script$Recompilation$76$1AAAAAA$index.L:1(myProject:/lib/modules/delete-contactforms/index.js:2)
    at org.openjdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:658)
    at org.openjdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513)
    at org.openjdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:520)
    at org.openjdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:111)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.executeRequire(ScriptExecutorImpl.java:164)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.requireJs(ScriptExecutorImpl.java:216)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.requireJsOrJson(ScriptExecutorImpl.java:205)
    at com.enonic.xp.script.impl.executor.ScriptExportsCache.getOrCompute(ScriptExportsCache.java:53)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.executeRequire(ScriptExecutorImpl.java:135)
    at com.enonic.xp.script.impl.function.RequireFunction.call(RequireFunction.java:31)
    at org.openjdk.nashorn.internal.runtime.linker.JSObjectLinker.jsObjectScopeCall(JSObjectLinker.java:254)
    at org.openjdk.nashorn.internal.scripts.Script$Recompilation$68$1AAAAAA$index.L:1(myProject:/jobs/delete-contact-forms.js:4)
    at org.openjdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:678)
    at org.openjdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513)
    at org.openjdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:520)
    at org.openjdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:111)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.executeRequire(ScriptExecutorImpl.java:164)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.requireJs(ScriptExecutorImpl.java:216)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.requireJsOrJson(ScriptExecutorImpl.java:205)
    at com.enonic.xp.script.impl.executor.ScriptExportsCache.getOrCompute(ScriptExportsCache.java:53)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.executeRequire(ScriptExecutorImpl.java:135)
    at com.enonic.xp.script.impl.function.RequireFunction.call(RequireFunction.java:31)
    at org.openjdk.nashorn.internal.runtime.linker.JSObjectLinker.jsObjectScopeCall(JSObjectLinker.java:254)
    at org.openjdk.nashorn.internal.scripts.Script$Recompilation$66$1AAAAAA$main.L:1(myProject:/main.js:4)
    at org.openjdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:678)
    at org.openjdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513)
    at org.openjdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:520)
    at org.openjdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:111)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.executeRequire(ScriptExecutorImpl.java:164)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.requireJs(ScriptExecutorImpl.java:216)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.requireJsOrJson(ScriptExecutorImpl.java:205)
    at com.enonic.xp.script.impl.executor.ScriptExportsCache.getOrCompute(ScriptExportsCache.java:53)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.executeRequire(ScriptExecutorImpl.java:135)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.doExecuteMain(ScriptExecutorImpl.java:118)
    at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646)
    ... 4 common frames omitted
 Caused by: java.lang.InterruptedException: null
    at java.base/java.util.concurrent.locks.ReentrantLock$Sync.tryLockNanos(ReentrantLock.java:167)
    at java.base/java.util.concurrent.locks.ReentrantLock.tryLock(ReentrantLock.java:479)
    at com.enonic.xp.script.impl.executor.ScriptExportsCache.getOrCompute(ScriptExportsCache.java:42)
    at com.enonic.xp.script.impl.executor.ScriptExecutorImpl.executeRequire(ScriptExecutorImpl.java:135)
    ... 42 common frames omitted

Here’s my code:

// main.js
function addJobs () {
  const cronJobs = [
    {
      name: 'Delete Contact Form',
      lib: require('/jobs/delete-contact-forms')
    }
  ]

  for (const jobIndex in cronJobs) {
    const Job = cronJobs[jobIndex]
    try {
      Job.lib.run(Job.options)
    } catch (error) {
      log.error('\n')
      log.error(`Error to start cron job ${Job.name}`)
      log.error(error)
      log.error('\n')
    }
  }
}
Context.run({
  user: {
    login: 'su',
    idProvider: 'system'
  },
  principals: ['role:system.admin']
}, () => {
  addJobs()
})
// delete-contact-forms.js
const cronLib = require('/lib/cron')
const context = require('/lib/xp/context')
const repo = require('/lib/xp/repo')
const DeleteContactFormsLib = require('/lib/modules/delete-contactforms')

exports.run = function () {
  cronLib.schedule({
      name: 'delete-contact-forms',
      cron: '*/15 * * * *',
      callback: function () {
        DeleteContactFormsLib.deleteContactForms()
      },
      context: {
        user: {
          login: 'su',
          idProvider: 'system'
        },
        principals: ['role:system.admin'],
        repository: 'com.enonic.cms.default',
        branch: 'draft'
      }
    })
}
// modules/delete-contactforms
const Node = require('/lib/xp/node')

module.exports = {
  deleteContactForms
}

function deleteContactForms () {}

Based on the stack trace it fails on this line in modules/delete-contactforms

const Node = require('/lib/xp/node')

Check if you include lib-node in your build.gradle, make sure to rebuild with clean.

Yes, the lib is correctly added to the build gradle

dependencies {
    implementation "com.enonic.xp:core-api:${xpVersion}"
    implementation "com.enonic.xp:portal-api:${xpVersion}"
    include "com.enonic.xp:lib-node:${xpVersion}"
    ...
}

As I said, the feature works perfectly. This error happens only in the project initialization

It appear to me that the error is not the same.
There is some long running or never ending code starting in main.js
As soon as a new verison of an app starts - the old app instance is interrupted to prevent memory leaks (hance InterruptedException)
Avoid delayed “require” techniques - maybe it will reveal what exactly is going on