Search in sources :

Example 1 with FileSystemLayout

use of org.wildfly.swarm.internal.FileSystemLayout in project wildfly-swarm by wildfly-swarm.

the class RuntimeDeployer method determineDeploymentTypeInternal.

private String determineDeploymentTypeInternal() {
    String artifact = System.getProperty(BootstrapProperties.APP_PATH);
    if (artifact != null) {
        int dotLoc = artifact.lastIndexOf('.');
        if (dotLoc >= 0) {
            return artifact.substring(dotLoc + 1);
        }
    }
    artifact = System.getProperty(BootstrapProperties.APP_ARTIFACT);
    if (artifact != null) {
        int dotLoc = artifact.lastIndexOf('.');
        if (dotLoc >= 0) {
            return artifact.substring(dotLoc + 1);
        }
    }
    // fallback to file system
    FileSystemLayout fsLayout = FileSystemLayout.create();
    return fsLayout.determinePackagingType();
}
Also used : FileSystemLayout(org.wildfly.swarm.internal.FileSystemLayout)

Example 2 with FileSystemLayout

use of org.wildfly.swarm.internal.FileSystemLayout in project wildfly-swarm by wildfly-swarm.

the class DefaultJarDeploymentFactory method setupUsingMaven.

@Override
public boolean setupUsingMaven(Archive<?> archive) throws Exception {
    FileSystemLayout fsLayout = FileSystemLayout.create();
    final Path classes = fsLayout.resolveBuildClassesDir();
    boolean success = false;
    if (Files.exists(classes)) {
        success = true;
        Files.walkFileTree(classes, new SimpleFileVisitor<Path>() {

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                Path simple = classes.relativize(file);
                archive.add(new FileAsset(file.toFile()), convertSeparators(simple));
                return super.visitFile(file, attrs);
            }
        });
    }
    return success;
}
Also used : Path(java.nio.file.Path) FileAsset(org.jboss.shrinkwrap.api.asset.FileAsset) FileSystemLayout(org.wildfly.swarm.internal.FileSystemLayout) FileVisitResult(java.nio.file.FileVisitResult) IOException(java.io.IOException) BasicFileAttributes(java.nio.file.attribute.BasicFileAttributes)

Example 3 with FileSystemLayout

use of org.wildfly.swarm.internal.FileSystemLayout in project wildfly-swarm by wildfly-swarm.

the class UberjarSimpleContainer method start.

@Override
public void start(Archive<?> archive) throws Exception {
    archive.add(EmptyAsset.INSTANCE, "META-INF/arquillian-testable");
    ContextRoot contextRoot = null;
    if (archive.getName().endsWith(".war")) {
        contextRoot = new ContextRoot("/");
        Node jbossWebNode = archive.as(WebArchive.class).get("WEB-INF/jboss-web.xml");
        if (jbossWebNode != null) {
            if (jbossWebNode.getAsset() != null) {
                try (BufferedReader reader = new BufferedReader(new InputStreamReader(jbossWebNode.getAsset().openStream()))) {
                    String content = String.join("\n", reader.lines().collect(Collectors.toList()));
                    Pattern pattern = Pattern.compile("<context-root>(.+)</context-root>");
                    Matcher matcher = pattern.matcher(content);
                    if (matcher.find()) {
                        contextRoot = new ContextRoot(matcher.group(1));
                    }
                }
            }
        }
        this.deploymentContext.getObjectStore().add(ContextRoot.class, contextRoot);
    }
    MainSpecifier mainSpecifier = containerContext.getObjectStore().get(MainSpecifier.class);
    boolean annotatedCreateSwarm = false;
    Method swarmMethod = getAnnotatedMethodWithAnnotation(this.testClass, CreateSwarm.class);
    List<Class<?>> types = determineTypes(this.testClass);
    // preflight check it
    if (swarmMethod != null) {
        if (Modifier.isStatic(swarmMethod.getModifiers())) {
            // good to go
            annotatedCreateSwarm = true;
            types.add(CreateSwarm.class);
            types.add(AnnotationBasedMain.class);
            archive.as(JARArchive.class).addModule("org.wildfly.swarm.container");
            archive.as(JARArchive.class).addModule("org.wildfly.swarm.configuration");
        } else {
            throw new IllegalArgumentException(String.format("Method annotated with %s is %s but it is not static", CreateSwarm.class.getSimpleName(), swarmMethod));
        }
    }
    if (types.size() > 0) {
        try {
            ((ClassContainer<?>) archive).addClasses(types.toArray(new Class[types.size()]));
        } catch (UnsupportedOperationException e) {
            // TODO Remove the try/catch when SHRINKWRAP-510 is resolved and we update to latest SW
            archive.as(JARArchive.class).addClasses(types.toArray(new Class[types.size()]));
        }
    }
    final ShrinkwrapArtifactResolvingHelper resolvingHelper = ShrinkwrapArtifactResolvingHelper.defaultInstance();
    BuildTool tool = new BuildTool(resolvingHelper).fractionDetectionMode(BuildTool.FractionDetectionMode.when_missing).bundleDependencies(false);
    String additionalModules = System.getProperty(SwarmInternalProperties.BUILD_MODULES);
    // See https://issues.jboss.org/browse/SWARM-571
    if (null == additionalModules) {
        // see if we can find it
        File modulesDir = new File("target/classes/modules");
        additionalModules = modulesDir.exists() ? modulesDir.getAbsolutePath() : null;
    }
    if (additionalModules != null) {
        tool.additionalModules(Stream.of(additionalModules.split(":")).map(File::new).filter(File::exists).map(File::getAbsolutePath).collect(Collectors.toList()));
    }
    final SwarmExecutor executor = new SwarmExecutor().withDefaultSystemProperties();
    if (annotatedCreateSwarm) {
        executor.withProperty(AnnotationBasedMain.ANNOTATED_CLASS_NAME, this.testClass.getName());
    }
    if (contextRoot != null) {
        executor.withProperty(SwarmProperties.CONTEXT_PATH, contextRoot.context());
    }
    executor.withProperty("swarm.inhibit.auto-stop", "true");
    String additionalRepos = System.getProperty(SwarmInternalProperties.BUILD_REPOS);
    if (additionalRepos != null) {
        additionalRepos = additionalRepos + ",";
    } else {
        additionalRepos = "";
    }
    additionalRepos = additionalRepos + "https://repository.jboss.org/nexus/content/groups/public/";
    executor.withProperty("remote.maven.repo", additionalRepos);
    // project dependencies
    FileSystemLayout fsLayout = FileSystemLayout.create();
    DeclaredDependencies declaredDependencies = DependencyDeclarationFactory.newInstance(fsLayout).create(fsLayout, resolvingHelper);
    tool.declaredDependencies(declaredDependencies);
    // see DependenciesContainer#addAllDependencies()
    if (archive instanceof DependenciesContainer) {
        DependenciesContainer<?> depContainer = (DependenciesContainer<?>) archive;
        if (depContainer.hasMarker(DependenciesContainer.ALL_DEPENDENCIES_MARKER)) {
            munge(depContainer, declaredDependencies);
        }
    } else if (archive instanceof WebArchive) {
        // Handle the default deployment of type WAR
        WebArchive webArchive = (WebArchive) archive;
        if (MarkerContainer.hasMarker(webArchive, DependenciesContainer.ALL_DEPENDENCIES_MARKER)) {
            munge(webArchive, declaredDependencies);
        }
    }
    tool.projectArchive(archive);
    final String debug = System.getProperty(SwarmProperties.DEBUG_PORT);
    if (debug != null) {
        try {
            executor.withDebug(Integer.parseInt(debug));
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException(String.format("Failed to parse %s of \"%s\"", SwarmProperties.DEBUG_PORT, debug), e);
        }
    }
    if (mainSpecifier != null) {
        tool.mainClass(mainSpecifier.getClassName());
        String[] args = mainSpecifier.getArgs();
        for (String arg : args) {
            executor.withArgument(arg);
        }
    } else if (annotatedCreateSwarm) {
        tool.mainClass(AnnotationBasedMain.class.getName());
    } else {
        Optional<String> mainClassName = Optional.empty();
        Node node = archive.get("META-INF/arquillian-main-class");
        if (node != null && node.getAsset() != null) {
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(node.getAsset().openStream()))) {
                mainClassName = reader.lines().findFirst();
            }
        }
        tool.mainClass(mainClassName.orElse(Swarm.class.getName()));
    }
    if (this.testClass != null) {
        tool.testClass(this.testClass.getName());
    }
    Archive<?> wrapped = null;
    try {
        wrapped = tool.build();
    } catch (Throwable t) {
        t.printStackTrace();
        throw t;
    }
    if (BootstrapProperties.flagIsSet(SwarmInternalProperties.EXPORT_UBERJAR)) {
        final File out = new File(wrapped.getName());
        System.err.println("Exporting swarm jar to " + out.getAbsolutePath());
        wrapped.as(ZipExporter.class).exportTo(out, true);
    }
    /* for (Map.Entry<ArchivePath, Node> each : wrapped.getContent().entrySet()) {
                System.err.println("-> " + each.getKey());
            }*/
    File executable = File.createTempFile(TempFileManager.WFSWARM_TMP_PREFIX + "arquillian", "-swarm.jar");
    wrapped.as(ZipExporter.class).exportTo(executable, true);
    executable.deleteOnExit();
    String mavenRepoLocal = System.getProperty("maven.repo.local");
    if (mavenRepoLocal != null) {
        executor.withProperty("maven.repo.local", mavenRepoLocal);
    }
    executor.withProperty("java.net.preferIPv4Stack", "true");
    File processFile = File.createTempFile(TempFileManager.WFSWARM_TMP_PREFIX + "mainprocessfile", null);
    executor.withProcessFile(processFile);
    executor.withJVMArguments(getJavaVmArgumentsList());
    executor.withExecutableJar(executable.toPath());
    workingDirectory = TempFileManager.INSTANCE.newTempDirectory("arquillian", null);
    executor.withWorkingDirectory(workingDirectory.toPath());
    this.process = executor.execute();
    this.process.getOutputStream().close();
    this.process.awaitReadiness(2, TimeUnit.MINUTES);
    if (!this.process.isAlive()) {
        throw new DeploymentException("Process failed to start");
    }
    if (this.process.getError() != null) {
        throw new DeploymentException("Error starting process", this.process.getError());
    }
}
Also used : Matcher(java.util.regex.Matcher) ClassContainer(org.jboss.shrinkwrap.api.container.ClassContainer) ZipExporter(org.jboss.shrinkwrap.api.exporter.ZipExporter) Node(org.jboss.shrinkwrap.api.Node) FileSystemLayout(org.wildfly.swarm.internal.FileSystemLayout) Swarm(org.wildfly.swarm.Swarm) CreateSwarm(org.wildfly.swarm.arquillian.CreateSwarm) ShrinkwrapArtifactResolvingHelper(org.wildfly.swarm.arquillian.resolver.ShrinkwrapArtifactResolvingHelper) ContextRoot(org.wildfly.swarm.arquillian.adapter.resources.ContextRoot) JARArchive(org.wildfly.swarm.spi.api.JARArchive) Pattern(java.util.regex.Pattern) InputStreamReader(java.io.InputStreamReader) Optional(java.util.Optional) SwarmExecutor(org.wildfly.swarm.tools.exec.SwarmExecutor) DependenciesContainer(org.wildfly.swarm.spi.api.DependenciesContainer) DeclaredDependencies(org.wildfly.swarm.tools.DeclaredDependencies) WebArchive(org.jboss.shrinkwrap.api.spec.WebArchive) Method(java.lang.reflect.Method) BuildTool(org.wildfly.swarm.tools.BuildTool) BufferedReader(java.io.BufferedReader) DeploymentException(org.jboss.arquillian.container.spi.client.container.DeploymentException) File(java.io.File)

Example 4 with FileSystemLayout

use of org.wildfly.swarm.internal.FileSystemLayout in project wildfly-swarm by wildfly-swarm.

the class DefaultVDBDeploymentFactory method setupUsingMaven.

@Override
public boolean setupUsingMaven(final Archive<?> givenArchive) throws Exception {
    final DependenciesContainer<?> archive = (DependenciesContainer<?>) givenArchive;
    FileSystemLayout fsLayout = FileSystemLayout.create();
    final Path classes = fsLayout.resolveBuildClassesDir();
    boolean success = false;
    if (Files.exists(classes)) {
        success = true;
        Files.walkFileTree(classes, new SimpleFileVisitor<Path>() {

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                Path simple = classes.relativize(file);
                archive.add(new FileAsset(file.toFile()), "classes/" + convertSeparators(simple));
                if (simple.toString().contains("config")) {
                    archive.add(new FileAsset(file.toFile()), convertSeparators(simple));
                }
                return super.visitFile(file, attrs);
            }
        });
    }
    archive.addAllDependencies();
    return success;
}
Also used : Path(java.nio.file.Path) FileAsset(org.jboss.shrinkwrap.api.asset.FileAsset) DependenciesContainer(org.wildfly.swarm.spi.api.DependenciesContainer) FileSystemLayout(org.wildfly.swarm.internal.FileSystemLayout) FileVisitResult(java.nio.file.FileVisitResult) IOException(java.io.IOException) BasicFileAttributes(java.nio.file.attribute.BasicFileAttributes)

Example 5 with FileSystemLayout

use of org.wildfly.swarm.internal.FileSystemLayout in project wildfly-swarm by wildfly-swarm.

the class DefaultRarDeploymentFactory method setupUsingMaven.

@Override
public boolean setupUsingMaven(final Archive<?> givenArchive) throws Exception {
    final DependenciesContainer<?> archive = (DependenciesContainer<?>) givenArchive;
    FileSystemLayout fsLayout = FileSystemLayout.create();
    final Path classes = fsLayout.resolveBuildClassesDir();
    boolean success = false;
    if (Files.exists(classes)) {
        success = true;
        Files.walkFileTree(classes, new SimpleFileVisitor<Path>() {

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                Path simple = classes.relativize(file);
                archive.add(new FileAsset(file.toFile()), "WEB-INF/classes/" + convertSeparators(simple));
                if (simple.toString().contains("WEB-INF")) {
                    archive.add(new FileAsset(file.toFile()), convertSeparators(simple));
                }
                return super.visitFile(file, attrs);
            }
        });
    }
    final Path webapp = fsLayout.resolveSrcWebAppDir();
    if (Files.exists(webapp)) {
        success = true;
        Files.walkFileTree(webapp, new SimpleFileVisitor<Path>() {

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                Path simple = webapp.relativize(file);
                archive.add(new FileAsset(file.toFile()), convertSeparators(simple));
                return super.visitFile(file, attrs);
            }
        });
    }
    archive.addAllDependencies();
    return success;
}
Also used : Path(java.nio.file.Path) FileAsset(org.jboss.shrinkwrap.api.asset.FileAsset) DependenciesContainer(org.wildfly.swarm.spi.api.DependenciesContainer) FileSystemLayout(org.wildfly.swarm.internal.FileSystemLayout) FileVisitResult(java.nio.file.FileVisitResult) IOException(java.io.IOException) BasicFileAttributes(java.nio.file.attribute.BasicFileAttributes)

Aggregations

FileSystemLayout (org.wildfly.swarm.internal.FileSystemLayout)6 IOException (java.io.IOException)4 FileVisitResult (java.nio.file.FileVisitResult)4 Path (java.nio.file.Path)4 BasicFileAttributes (java.nio.file.attribute.BasicFileAttributes)4 FileAsset (org.jboss.shrinkwrap.api.asset.FileAsset)4 DependenciesContainer (org.wildfly.swarm.spi.api.DependenciesContainer)4 BufferedReader (java.io.BufferedReader)1 File (java.io.File)1 InputStreamReader (java.io.InputStreamReader)1 Method (java.lang.reflect.Method)1 Optional (java.util.Optional)1 Matcher (java.util.regex.Matcher)1 Pattern (java.util.regex.Pattern)1 DeploymentException (org.jboss.arquillian.container.spi.client.container.DeploymentException)1 Node (org.jboss.shrinkwrap.api.Node)1 ClassContainer (org.jboss.shrinkwrap.api.container.ClassContainer)1 ZipExporter (org.jboss.shrinkwrap.api.exporter.ZipExporter)1 WebArchive (org.jboss.shrinkwrap.api.spec.WebArchive)1 Swarm (org.wildfly.swarm.Swarm)1