gradle - Gradle + Cargo + JBoss 5.1 = java.lang.ClassNotFoundException:org.jnp.interfaces.NamingContextFactory

标签 gradle dependencies jboss5.x cargo

我正在尝试使用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 guest虚拟机运行,并且我想远程部署在主机上运行的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”的输出:

Executing task ':cargoDeployRemote' (up-to-date check took 0.002 secs) due to: Task.upToDateWhen is false. Container ID = jboss51x Deployable artifacts = [/home/gerald/testapp/build/libs/testapp.war] Starting action 'deploy' for remote container 'JBoss 5.1.x' on 'http://10.0.2.2:8080' Container properties = [:] :cargoDeployRemote FAILED :cargoDeployRemote (Thread[Daemon worker Thread 14,5,main]) completed. Took 0.588 secs.

FAILURE: Build failed with an exception.

  • What went wrong: Execution failed for task ':cargoDeployRemote'. 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]).


这是一个异常(exception):
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

最佳答案

我发现以下资源的答案:

  • https://discuss.gradle.org/t/dependency-classpath-issue-when-deploying-a-war-via-cargo-and-com-bmuschko-cargo-on-remote-jboss-5-1-0-ga/9943
  • https://github.com/bmuschko/gradle-cargo-plugin/issues/78

  • 解决该问题的摘要是,我必须在第一级依赖项关闭(而不是buildscript.dependencies关闭)中将 cargo 依赖项作为 cargo 配置。
    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
        }
    }
    

    关于gradle - Gradle + Cargo + JBoss 5.1 = java.lang.ClassNotFoundException:org.jnp.interfaces.NamingContextFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30572740/

    相关文章:

    c++ - 向库用户隐藏库依赖项

    dependencies - Go 拒绝未使用依赖项的优缺点

    java - 如何在java web项目中配置自定义日志文件

    android - 项目的构建脚本中的gradle版本号

    android - Gradle 项目同步失败,没有工具链

    gradle - gradle任务和groovy文件上的导入

    java - Struts 1.1 和 Servlet 2.5 - 测试期间 JspException 的 NoClassDefFoundError

    android - 如何改进将输出 APK 从 Android 项目复制到新文件夹的任务?

    javascript - 在 ngDialog 中与其他服务一起传递依赖项 - Angular

    java - 如何解决线程 “main” javax.naming.NameNotFoundException : not bound?中的异常