private void copyModules()

in src/main/java/org/apache/maven/plugins/ear/EarMojo.java [393:453]


    private void copyModules(
            final JavaEEVersion javaEEVersion, List<String> unpackTypesList, Collection<String> outdatedResources)
            throws MojoExecutionException, MojoFailureException {
        try {
            for (EarModule module : getModules()) {
                final File sourceFile = module.getArtifact().getFile();
                final File destinationFile = buildDestinationFile(getWorkDirectory(), module.getUri());
                if (!sourceFile.isFile()) {
                    throw new MojoExecutionException("Cannot copy a directory: " + sourceFile.getAbsolutePath()
                            + "; Did you package/install " + module.getArtifact() + "?");
                }

                if (destinationFile.getCanonicalPath().equals(sourceFile.getCanonicalPath())) {
                    getLog().info("Skipping artifact [" + module + "], as it already exists at [" + module.getUri()
                            + "]");
                    // FIXME: Shouldn't that result in a build failure!?
                    continue;
                }

                // If the module is within the unpack list, make sure that no unpack wasn't forced (null or true)
                // If the module is not in the unpack list, it should be true
                if ((unpackTypesList.contains(module.getType())
                                && (module.shouldUnpack() == null || module.shouldUnpack()))
                        || (module.shouldUnpack() != null && module.shouldUnpack())) {
                    getLog().info("Copying artifact [" + module + "] to [" + module.getUri() + "] (unpacked)");
                    // Make sure that the destination is a directory to avoid plexus nasty stuff :)
                    if (!destinationFile.isDirectory() && !destinationFile.mkdirs()) {
                        throw new MojoExecutionException("Error creating " + destinationFile);
                    }
                    unpack(sourceFile, destinationFile, outdatedResources);

                    if (module.changeManifestClasspath()) {
                        changeManifestClasspath(module, destinationFile, javaEEVersion, outdatedResources);
                    }
                } else {
                    if (sourceFile.lastModified() > destinationFile.lastModified()) {
                        getLog().info("Copying artifact [" + module + "] to [" + module.getUri() + "]");
                        createParentIfNecessary(destinationFile);
                        Files.copy(
                                sourceFile.toPath(),
                                destinationFile.toPath(),
                                LinkOption.NOFOLLOW_LINKS,
                                StandardCopyOption.REPLACE_EXISTING);
                        if (module.changeManifestClasspath()) {
                            changeManifestClasspath(module, destinationFile, javaEEVersion, outdatedResources);
                        }
                    } else {
                        getLog().debug("Skipping artifact [" + module + "], as it is already up to date at ["
                                + module.getUri() + "]");
                    }
                    removeFromOutdatedResources(destinationFile.toPath(), outdatedResources);
                }
            }
        } catch (IOException e) {
            throw new MojoExecutionException("Error copying EAR modules", e);
        } catch (ArchiverException e) {
            throw new MojoExecutionException("Error unpacking EAR modules", e);
        } catch (NoSuchArchiverException e) {
            throw new MojoExecutionException("No Archiver found for EAR modules", e);
        }
    }