1

使用 gradle 脚本:

buildscript {
    version = System.getProperty('swarmVersion') ?: '2017.1.1'

    repositories {
        mavenLocal()
        mavenCentral()
    }

    dependencies {
        classpath "io.spring.gradle:dependency-management-plugin:1.0.0.RC2"
        classpath "org.wildfly.swarm:wildfly-swarm-plugin:$version"
    }
}

apply plugin: "io.spring.dependency-management"
apply plugin: 'wildfly-swarm'
apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'test.Main'

swarm {
    properties {
        swarm.http.port = 8080
    }
}

repositories {
    mavenLocal()
    mavenCentral()
    maven {
        url 'https://maven.repository.redhat.com/nexus/content/repositories/releases/'
    }
    maven {
        url 'https://maven.repository.redhat.com/nexus/content/repositories/thirdparty-releases/'
    }
}

dependencyManagement {
    imports {
        mavenBom "org.wildfly.swarm:bom-all:$version"
    }
}

dependencies {
    compile "org.wildfly.swarm:jaxrs"
}

test.Main

  package test;

import test.resources.TestResource;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.wildfly.swarm.Swarm;
import org.wildfly.swarm.jaxrs.JAXRSArchive;

public class Main {

  public static void main(String... args) throws Exception {

    Swarm swarm = new Swarm();
    JAXRSArchive deployment = ShrinkWrap.create(JAXRSArchive.class);
    deployment.addClass(TestResource.class);
    deployment.addAllDependencies();
    swarm.start();
    swarm.deploy(deployment);
  }
}

我在启动 jar 时收到此错误:

2017-01-24 12:00:35,363 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC000001: Failed to start service jboss.deployment.unit."8cf83a03-d940-4e8b-b223-f9a9e00976ce.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."8cf83a03-d940-4e8b-b223-f9a9e00976ce.war".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of deployment "8cf83a03-d940-4e8b-b223-f9a9e00976ce.war"
        at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:154)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYUT0049: Error loading SCI from module: javax.servlet.jstl.api:main
        at org.wildfly.extension.undertow.deployment.ServletContainerInitializerDeploymentProcessor.deploy(ServletContainerInitializerDeploymentProcessor.java:118)
        at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:147)
        ... 5 more
Caused by: org.jboss.modules.ModuleLoadException: Error loading module from modules/org/apache/xalan/main/module.xml
        at org.jboss.modules.xml.ModuleXmlParser.parseModuleXml(ModuleXmlParser.java:228)
        at org.wildfly.swarm.bootstrap.modules.ClasspathModuleFinder.findModule(ClasspathModuleFinder.java:80)
        at org.jboss.modules.ModuleLoader.findModule(ModuleLoader.java:439)
        at org.jboss.modules.ModuleLoader.loadModuleLocal(ModuleLoader.java:342)
        at org.jboss.modules.ModuleLoader.preloadModule(ModuleLoader.java:289)
        at org.jboss.modules.Module.addPaths(Module.java:1079)
        at org.jboss.modules.Module.link(Module.java:1449)
        at org.jboss.modules.Module.relinkIfNecessary(Module.java:1477)
        at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:225)
        at org.wildfly.extension.undertow.deployment.ServletContainerInitializerDeploymentProcessor.deploy(ServletContainerInitializerDeploymentProcessor.java:109)
        ... 6 more
Caused by: org.jboss.modules.xml.XmlPullParserException: Failed to resolve artifact 'xalan:serializer:2.7.1.jbossorg-2' (position: END_TAG seen ...esources>\n    <artifact name="xalan:serializer:2.7.1.jbossorg-2"/>... @5:57) 
        at org.jboss.modules.xml.ModuleXmlParser.parseArtifact(ModuleXmlParser.java:838)
        at org.jboss.modules.xml.ModuleXmlParser.parseResources(ModuleXmlParser.java:739)
        at org.jboss.modules.xml.ModuleXmlParser.parseModuleContents(ModuleXmlParser.java:535)
        at org.jboss.modules.xml.ModuleXmlParser.parseDocument(ModuleXmlParser.java:340)
        at org.jboss.modules.xml.ModuleXmlParser.parseModuleXml(ModuleXmlParser.java:226)
        ... 15 more

2017-01-24 12:00:35,371 ERROR [org.jboss.as.controller.management-operation] (main) WFLYCTL0013: Operation ("add") failed - address: (("deployment" => "8cf83a03-d940-4e8b-b223-f9a9e00976ce.war")) - failure description: {
    "WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"8cf83a03-d940-4e8b-b223-f9a9e00976ce.war\".INSTALL" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"8cf83a03-d940-4e8b-b223-f9a9e00976ce.war\".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of deployment \"8cf83a03-d940-4e8b-b223-f9a9e00976ce.war\"
    Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYUT0049: Error loading SCI from module: javax.servlet.jstl.api:main
    Caused by: org.jboss.modules.ModuleLoadException: Error loading module from modules/org/apache/xalan/main/module.xml
    Caused by: org.jboss.modules.xml.XmlPullParserException: Failed to resolve artifact 'xalan:serializer:2.7.1.jbossorg-2' (position: END_TAG seen ...esources>\\n    <artifact name=\"xalan:serializer:2.7.1.jbossorg-2\"/>... @5:57) "},
    "WFLYCTL0412: Required services that are not installed:" => ["jboss.deployment.unit.\"8cf83a03-d940-4e8b-b223-f9a9e00976ce.war\".INSTALL"],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => undefined
}
2017-01-24 12:00:35,374 ERROR [org.jboss.as.server] (main) WFLYSRV0021: Deploy of deployment "8cf83a03-d940-4e8b-b223-f9a9e00976ce.war" was rolled back with the following failure message: 
{
    "WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"8cf83a03-d940-4e8b-b223-f9a9e00976ce.war\".INSTALL" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"8cf83a03-d940-4e8b-b223-f9a9e00976ce.war\".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of deployment \"8cf83a03-d940-4e8b-b223-f9a9e00976ce.war\"
    Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYUT0049: Error loading SCI from module: javax.servlet.jstl.api:main
    Caused by: org.jboss.modules.ModuleLoadException: Error loading module from modules/org/apache/xalan/main/module.xml
    Caused by: org.jboss.modules.xml.XmlPullParserException: Failed to resolve artifact 'xalan:serializer:2.7.1.jbossorg-2' (position: END_TAG seen ...esources>\\n    <artifact name=\"xalan:serializer:2.7.1.jbossorg-2\"/>... @5:57) "},
    "WFLYCTL0412: Required services that are not installed:" => ["jboss.deployment.unit.\"8cf83a03-d940-4e8b-b223-f9a9e00976ce.war\".INSTALL"],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => undefined
}
4

3 回答 3

1

Wildfly Swarm 的 gradle 插件存在许多问题,例如

https://issues.jboss.org/browse/SWARM-542

https://issues.jboss.org/browse/SWARM-826

这个评论并不能让我确信它们很快就会得到修复。

为此,目前我的方法只是假设使用 Gradle 可靠构建 Swarm 应用程序的唯一方法是首先使用 Maven 构建一个空心的 Swarm uberjar,然后使用 Gradle 集成生成的 Wildfly jar 或(如我已经完成了),在 Docker 中。

您错过了自动分数检测(无论如何这似乎对我在 gradle 中不起作用),但另一方面,如果您没有为每个构建构建整个 uberjar,您确实会获得更快的构建时间。当然,由于 Maven 显然是 Red Hat 的一等公民,因此您将自己与依赖不受供应商支持的构建工具脱钩。

有关空心 uberjars 的更多信息:

https://wildfly-swarm.gitbooks.io/wildfly-swarm-users-guide/content/getting-started/tooling/maven-plugin.html

要使用 uberjar 部署应用程序,您只需将 WAR 添加到命令行:

java -jar my-hollow-swarm.jar my-application.war

顺便说一句,您还可以传入配置和其他详细信息:

java -jar my-hollow-swarm.jar my-application.war -c /etc/config.xml
java -jar my-hollow-swarm.jar my-application.war --help
于 2017-02-01T12:08:14.930 回答
0

您需要在 Maven 设置中激活 JBoss Nexus 存储库。

也可以看看:

一个例子:

原因是虽然 WildFly Swarm 和 WildFly 配置工具正确下载了工件,但其中一些仅在 JBoss Nexus 上可用,Maven 将在本地缓存的元数据中跟踪它。

当您将运行不同的进程(例如您自己的应用程序)而不启用此存储库时,正在使用的 Eclipse Aether 库将(如预期的那样)尊重此元数据并忽略尚未由任何当前启用的存储库提供的任何工件。

于 2018-01-24T10:22:06.957 回答
0

我想出解决方法,如果我将包添加到部署然后 swarm 能够正常部署它。以下是对我有用的解决方案。

Swarm swarm = new Swarm();
JAXRSArchive deployment = ShrinkWrap.create(JAXRSArchive.class);
deployment.addPackage("test");
deployment.addAllDependencies();
swarm.start();
swarm.deploy(deployment);
于 2017-01-24T15:52:48.993 回答