【问题标题】:Gradle+Cargo+JBoss 5.1 = java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactoryGradle+Cargo+JBoss 5.1 = java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
【发布时间】:2015-06-01 11:49:47
【问题描述】:

我正在尝试使用 gradle 构建文件和 Benjamin Muschko (https://github.com/bmuschko/gradle-cargo-plugin) 的 Gradle Cargo 插件在远程 JBoss 5.1.0.GA 容器上部署一个 war 文件。

在一个非常简单的项目上启动 cargoDeployRemote 任务时,我遇到了 java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory。 帖子about Cargo deployment on a JBoss 5.1.0.GA using Maven plugin 帮助我设置了依赖项。 例如,缺少的类 NamingContextFactory 也在 jboss-as-varia 依赖项中定义。显然,我一定错过了什么。

该项目只是一个包含以下 Gradle 脚本的文件夹,仅此而已。 我必须补充一点,我从 linux 虚拟机(运行 ArchLinux 的 virtualbox 来宾)内部运行构建脚本,并且我想远程部署在主机上运行的 JBoss 5.1.0.GA 服务器上。我可以通过访客的网关地址(10.0.2.2)访问 JBoss,所以我想这不是这里的问题。

我尝试提供最简单的 gradle 构建文件来显示这个问题。 关于应该做些什么来完成这项工作的任何线索?任何帮助表示赞赏。

这是我的 build.gradle 文件:

apply plugin: 'war'
apply plugin: 'com.bmuschko.cargo'

buildscript {

    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.bmuschko:gradle-cargo-plugin:2.1.1'
    }

}

repositories {

   mavenCentral()

   dependencies {
        providedCompile 'org.jboss.jbossas:jboss-as-jbossas-remoting:5.1.0.GA'
        providedCompile 'org.jboss.jbossas:jboss-as-client:5.1.0.GA'
        providedCompile 'org.jboss.jbossas:jboss-as-varia:5.1.0.GA'
        providedCompile 'org.jboss.integration:jboss-profileservice-spi:5.1.0.GA'
   }

}

cargo {

    containerId = 'jboss51x'
    port = 8080

    remote {
      username = "admin"
      password = "admin"
      hostname = "10.0.2.2"
    }

    deployable {
        context = 'myawesomewebapp'
    }
}

这是显示错误的“gradle cargoDeployRemote -i”的输出:

执行任务 ':cargoDeployRemote'(最新检查耗时 0.002 秒) 由于:Task.upToDateWhen 为假。容器 ID = jboss51x 可部署的工件 = [/home/gerald/testapp/build/libs/testapp.war] 启动远程容器“JBoss 5.1.x”的“部署”操作 'http://10.0.2.2:8080' 容器属性 = [:] :cargoDeployRemote 失败:cargoDeployRemote(线程[守护进程线程 14,5,main]) 完全的。耗时 0.588 秒。

FAILURE:构建失败并出现异常。

  • 出了什么问题:任务“:cargoDeployRemote”执行失败。 org.codehaus.cargo.container.ContainerException:创建失败 具有实现类的部署程序 org.codehaus.cargo.container.jboss.JBoss51xRemoteDeployer 用于 参数(容器 [id = [jboss51x]],部署器类型 [远程])。

这里是个例外:

Caused by: org.codehaus.cargo.container.ContainerException: Failed to create deployer with implementation class org.codehaus.cargo.container.jboss.JBoss51xRemoteDeployer for the parameters (container [id = [jboss51x]], deployer type [remote]).
    at org.codehaus.cargo.generic.spi.AbstractGenericHintFactory.createImplementation(AbstractGenericHintFactory.java:156)
    at org.codehaus.cargo.generic.spi.AbstractIntrospectionGenericHintFactory.createImplementation(AbstractIntrospectionGenericHintFactory.java:93)
    at org.codehaus.cargo.generic.deployer.DefaultDeployerFactory.createDeployer(DefaultDeployerFactory.java:140)
    at org.codehaus.cargo.generic.deployer.DefaultDeployerFactory.createDeployer(DefaultDeployerFactory.java:160)
    at org.codehaus.cargo.ant.CargoTask.executeActions(CargoTask.java:758)
    at org.codehaus.cargo.ant.CargoTask.execute(CargoTask.java:577)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    ... 70 more
Caused by: java.lang.reflect.InvocationTargetException
    at org.codehaus.cargo.generic.deployer.DefaultDeployerFactory.createInstance(DefaultDeployerFactory.java:244)
    at org.codehaus.cargo.generic.deployer.DefaultDeployerFactory.createInstance(DefaultDeployerFactory.java:42)
    at org.codehaus.cargo.generic.spi.AbstractGenericHintFactory.createImplementation(AbstractGenericHintFactory.java:150)
    ... 77 more
Caused by: org.codehaus.cargo.util.CargoException: Cannot locate the JBoss connector classes! Make sure the required JBoss JARs (or Maven dependencies) are in CARGO's classpath.
More information on: http://cargo.codehaus.org/JBoss+Remote+Deployer
    at org.codehaus.cargo.container.jboss.JBoss5xRemoteDeployer.<init>(JBoss5xRemoteDeployer.java:161)
    at org.codehaus.cargo.container.jboss.JBoss51xRemoteDeployer.<init>(JBoss51xRemoteDeployer.java:41)
    ... 80 more
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
    at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1366)
    at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1315)
    at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1068)
    at org.codehaus.cargo.container.jboss.JBoss5xRemoteDeployer.<init>(JBoss5xRemoteDeployer.java:156)
    ... 81 more

【问题讨论】:

  • 您的 repositories.dependencies.providedCompile 似乎放错了位置。这些可能应该是 buildscript.dependencies.classpath 。那就是说我对 java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory 有同样的问题,如果您分享您在此处找到的任何答案,将不胜感激。

标签: gradle dependencies jboss5.x cargo


【解决方案1】:

我在以下资源中找到了答案:

为了解决这个问题,我必须做的总结是,我必须在第一级依赖项关闭(而不是 buildscript.dependencies 关闭)中将货物依赖项作为货物配置。

apply plugin: 'ear'
apply plugin: 'com.bmuschko.cargo'  

buildscript {  
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.bmuschko:gradle-cargo-plugin:2.2.1'        
    }
}

repositories {
    //Order of repositories is significant and will effect finding of jaas module
    maven {
        name = "JBoss Deprecated Maven Repository"
        url = "https://repository.jboss.org/nexus/content/repositories/deprecated"
    }
    maven {
        url 'https://repository.jboss.org/nexus/content/groups/public/'
    }        
    maven {
        name = "JBoss.org third party releases repository"
        url = "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases"
    }  
    mavenCentral()
    jcenter()
}

dependencies {
    // My app specific modules taken out from here

    def cargoVersion = '1.4.5'
    cargo "org.codehaus.cargo:cargo-core-uberjar:$cargoVersion",
          "org.codehaus.cargo:cargo-ant:$cargoVersion"    
    cargo 'org.jboss.jbossas:jboss-as-jbossas-remoting:5.1.0.GA'
    cargo 'org.jboss.jbossas:jboss-as-client:5.1.0.GA'
    cargo 'org.jboss.jbossas:jboss-as-varia:5.1.0.GA'
    cargo 'org.jboss.integration:jboss-profileservice-spi:5.1.0.GA'
}

cargo {
    containerId = 'jboss51x'
    port = 8009

    remote {
        hostname = project.hostname
        username = project.username
        password = project.password
    }
}

【讨论】:

    猜你喜欢
    • 2011-06-06
    • 2013-12-07
    • 2015-12-30
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多