Search in sources :

Example 51 with MavenXpp3Reader

use of org.eclipse.ceylon.aether.apache.maven.model.io.xpp3.MavenXpp3Reader in project BIMserver by opensourceBIM.

the class MavenPluginLocation method getLatestVersion.

public MavenPluginVersion getLatestVersion() {
    Artifact artifact = new DefaultArtifact(groupId + ":" + artifactId + ":LATEST");
    VersionRangeRequest rangeRequest = new VersionRangeRequest();
    rangeRequest.setArtifact(artifact);
    try {
        VersionRangeResult rangeResult = mavenPluginRepository.getSystem().resolveVersionRange(mavenPluginRepository.getSession(), rangeRequest);
        List<Version> versions = rangeResult.getVersions();
        if (!versions.isEmpty()) {
            Version version = versions.get(0);
            ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
            Artifact versionArtifact = new DefaultArtifact(groupId + ":" + artifactId + ":pom:" + version.toString());
            descriptorRequest.setArtifact(versionArtifact);
            MavenPluginVersion mavenPluginVersion = new MavenPluginVersion(versionArtifact, version);
            ArtifactDescriptorResult descriptorResult = mavenPluginRepository.getSystem().readArtifactDescriptor(mavenPluginRepository.getSession(), descriptorRequest);
            ArtifactRequest request = new ArtifactRequest();
            request.setArtifact(descriptorResult.getArtifact());
            ArtifactResult resolveArtifact = mavenPluginRepository.getSystem().resolveArtifact(mavenPluginRepository.getSession(), request);
            File pomFile = resolveArtifact.getArtifact().getFile();
            MavenXpp3Reader mavenreader = new MavenXpp3Reader();
            try (FileReader fileReader = new FileReader(pomFile)) {
                try {
                    Model model = mavenreader.read(fileReader);
                    mavenPluginVersion.setModel(model);
                } catch (XmlPullParserException e) {
                    e.printStackTrace();
                }
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            for (org.eclipse.aether.graph.Dependency dependency : descriptorResult.getDependencies()) {
                DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(dependency.getArtifact().getVersion());
                mavenPluginVersion.addDependency(new MavenDependency(dependency.getArtifact(), artifactVersion));
            }
            return mavenPluginVersion;
        }
    } catch (VersionRangeResolutionException e) {
        e.printStackTrace();
    } catch (ArtifactDescriptorException e) {
        e.printStackTrace();
    } catch (ArtifactResolutionException e) {
        e.printStackTrace();
    }
    return null;
}
Also used : FileNotFoundException(java.io.FileNotFoundException) ArtifactResolutionException(org.eclipse.aether.resolution.ArtifactResolutionException) ArtifactRequest(org.eclipse.aether.resolution.ArtifactRequest) DefaultArtifactVersion(org.apache.maven.artifact.versioning.DefaultArtifactVersion) Version(org.eclipse.aether.version.Version) SPluginBundleVersion(org.bimserver.interfaces.objects.SPluginBundleVersion) VersionRangeRequest(org.eclipse.aether.resolution.VersionRangeRequest) FileReader(java.io.FileReader) XmlPullParserException(org.codehaus.plexus.util.xml.pull.XmlPullParserException) ArtifactDescriptorRequest(org.eclipse.aether.resolution.ArtifactDescriptorRequest) VersionRangeResolutionException(org.eclipse.aether.resolution.VersionRangeResolutionException) VersionRangeResult(org.eclipse.aether.resolution.VersionRangeResult) DefaultArtifactVersion(org.apache.maven.artifact.versioning.DefaultArtifactVersion) MavenXpp3Reader(org.apache.maven.model.io.xpp3.MavenXpp3Reader) IOException(java.io.IOException) DefaultArtifact(org.eclipse.aether.artifact.DefaultArtifact) Artifact(org.eclipse.aether.artifact.Artifact) ArtifactResult(org.eclipse.aether.resolution.ArtifactResult) Model(org.apache.maven.model.Model) ArtifactDescriptorResult(org.eclipse.aether.resolution.ArtifactDescriptorResult) File(java.io.File) ArtifactDescriptorException(org.eclipse.aether.resolution.ArtifactDescriptorException) DefaultArtifact(org.eclipse.aether.artifact.DefaultArtifact)

Example 52 with MavenXpp3Reader

use of org.eclipse.ceylon.aether.apache.maven.model.io.xpp3.MavenXpp3Reader in project BIMserver by opensourceBIM.

the class PluginBundleManager method update.

public PluginBundle update(PluginBundleVersionIdentifier pluginBundleVersionIdentifier, SPluginBundle sPluginBundle, SPluginBundleVersion pluginBundleVersion, Path jarFile, Path pomFile, List<SPluginInformation> plugins) throws Exception {
    PluginBundle existingPluginBundle = pluginBundleIdentifierToPluginBundle.get(pluginBundleVersionIdentifier.getPluginBundleIdentifier());
    if (existingPluginBundle == null) {
        throw new UserException("No previous version of plugin bundle " + pluginBundleVersionIdentifier.getPluginBundleIdentifier() + " found");
    }
    try {
        existingPluginBundle.close();
        if (pluginBundleIdentifierToPluginBundle.remove(pluginBundleVersionIdentifier.getPluginBundleIdentifier()) == null) {
            LOGGER.warn("Previous version of " + pluginBundleVersionIdentifier.getPluginBundleIdentifier() + " not found");
        }
        PluginBundleVersionIdentifier currentVersion = pluginBundleIdentifierToCurrentPluginBundleVersionIdentifier.get(pluginBundleVersionIdentifier.getPluginBundleIdentifier());
        if (pluginBundleIdentifierToCurrentPluginBundleVersionIdentifier.remove(pluginBundleVersionIdentifier.getPluginBundleIdentifier()) == null) {
            LOGGER.warn("Previous version of " + pluginBundleVersionIdentifier.getPluginBundleIdentifier() + " not found");
        }
        if (pluginBundleVersionIdentifierToPluginBundle.remove(currentVersion) == null) {
            LOGGER.warn("Previous version (" + currentVersion + ") of " + pluginBundleVersionIdentifier.getPluginBundleIdentifier() + " not found");
        }
        for (PluginContext pluginContext : existingPluginBundle) {
            pluginManager.removeImplementation(pluginContext);
        }
        if (existingPluginBundle.getPluginBundle().getInstalledVersion().getType() == SPluginBundleType.MAVEN) {
            Path target = pluginsDir.resolve(currentVersion.getFileName());
            Files.delete(target);
        }
    // for (PluginContext pluginContext : existingPluginBundle) {
    // pluginChangeListener.pluginUninstalled(pluginContext);
    // }
    } catch (IOException e) {
        LOGGER.error("", e);
    }
    Path target = pluginsDir.resolve(pluginBundleVersionIdentifier.getFileName());
    if (Files.exists(target)) {
        throw new PluginException("This plugin has already been installed " + target.getFileName().toString());
    }
    Files.copy(jarFile, target);
    MavenXpp3Reader mavenreader = new MavenXpp3Reader();
    Model model = null;
    try (FileReader fileReader = new FileReader(pomFile.toFile())) {
        model = mavenreader.read(fileReader);
    }
    DelegatingClassLoader delegatingClassLoader = new DelegatingClassLoader(getClass().getClassLoader());
    for (org.apache.maven.model.Dependency dependency : model.getDependencies()) {
        if (dependency.getGroupId().equals("org.opensourcebim") && (dependency.getArtifactId().equals("shared") || dependency.getArtifactId().equals("pluginbase"))) {
        // TODO Skip, we should also check the version though
        } else {
            PluginBundleIdentifier pluginBundleIdentifier = new PluginBundleIdentifier(dependency.getGroupId(), dependency.getArtifactId());
            if (pluginBundleIdentifierToPluginBundle.containsKey(pluginBundleIdentifier)) {
                // if (false) {
                // VersionRange versionRange =
                // VersionRange.createFromVersion(dependency.getVersion());
                // String version =
                // pluginBundleIdentifierToPluginBundle.get(pluginBundleIdentifier).getPluginBundleVersion().getVersion();
                // ArtifactVersion artifactVersion = new
                // DefaultArtifactVersion(version);
                // if (versionRange.containsVersion(artifactVersion)) {
                // // OK
                // } else {
                // throw new Exception("Required dependency " +
                // pluginBundleIdentifier + " is installed, but it's version
                // (" + version + ") does not comply to the required version
                // (" + dependency.getVersion() + ")");
                // }
                // } else {
                LOGGER.info("Skipping strict dependency checking for dependency " + dependency.getArtifactId());
            // }
            } else {
                if (dependency.getGroupId().equals("org.opensourcebim") && (dependency.getArtifactId().equals("shared") || dependency.getArtifactId().equals("pluginbase"))) {
                    throw new Exception("Required dependency " + pluginBundleIdentifier + " is not installed");
                } else {
                    MavenPluginLocation mavenPluginLocation = mavenPluginRepository.getPluginLocation(model.getRepositories().get(0).getUrl(), dependency.getGroupId(), dependency.getArtifactId());
                    try {
                        Path depJarFile = mavenPluginLocation.getVersionJar(dependency.getVersion());
                        FileJarClassLoader jarClassLoader = new FileJarClassLoader(pluginManager, delegatingClassLoader, depJarFile);
                        jarClassLoaders.add(jarClassLoader);
                        delegatingClassLoader.add(jarClassLoader);
                    } catch (Exception e) {
                    }
                }
            }
        }
    }
    PluginBundle pluginBundle = null;
    // Stage 1, load all plugins from the JAR file and initialize them
    try {
        pluginBundle = loadPluginsFromJar(pluginBundleVersionIdentifier, target, sPluginBundle, pluginBundleVersion, delegatingClassLoader);
        for (SPluginInformation sPluginInformation : plugins) {
            if (sPluginInformation.isEnabled()) {
                PluginContext pluginContext = pluginBundle.getPluginContext(sPluginInformation.getIdentifier());
                PluginContext previousContext = existingPluginBundle.getPluginContext(pluginContext.getIdentifier());
                // TODO when there was no previous plugin (new plugin in bundle for example), we should use the default system settings of the particular plugin... not null
                pluginContext.getPlugin().init(pluginContext, previousContext == null ? null : previousContext.getSystemSettings());
            }
        }
    } catch (Exception e) {
        Files.delete(target);
        LOGGER.error("", e);
        throw e;
    }
    // uninstalled
    try {
        long pluginBundleVersionId = pluginManager.pluginBundleUpdated(pluginBundle);
        for (SPluginInformation sPluginInformation : plugins) {
            if (sPluginInformation.isEnabled()) {
                PluginContext pluginContext = pluginBundle.getPluginContext(sPluginInformation.getIdentifier());
                pluginManager.pluginUpdated(pluginBundleVersionId, pluginContext, sPluginInformation);
            }
        }
        return pluginBundle;
    } catch (Exception e) {
        uninstall(pluginBundleVersionIdentifier);
        LOGGER.error("", e);
        throw e;
    }
}
Also used : Path(java.nio.file.Path) PluginException(org.bimserver.shared.exceptions.PluginException) SPluginInformation(org.bimserver.interfaces.objects.SPluginInformation) MavenXpp3Reader(org.apache.maven.model.io.xpp3.MavenXpp3Reader) IOException(java.io.IOException) DelegatingClassLoader(org.bimserver.plugins.classloaders.DelegatingClassLoader) PluginException(org.bimserver.shared.exceptions.PluginException) ArtifactDescriptorException(org.eclipse.aether.resolution.ArtifactDescriptorException) DependencyCollectionException(org.eclipse.aether.collection.DependencyCollectionException) XmlPullParserException(org.codehaus.plexus.util.xml.pull.XmlPullParserException) JAXBException(javax.xml.bind.JAXBException) FileNotFoundException(java.io.FileNotFoundException) UserException(org.bimserver.shared.exceptions.UserException) InvalidVersionSpecificationException(org.apache.maven.artifact.versioning.InvalidVersionSpecificationException) ArtifactResolutionException(org.eclipse.aether.resolution.ArtifactResolutionException) DependencyResolutionException(org.eclipse.aether.resolution.DependencyResolutionException) IOException(java.io.IOException) SPluginBundle(org.bimserver.interfaces.objects.SPluginBundle) FileJarClassLoader(org.bimserver.plugins.classloaders.FileJarClassLoader) Model(org.apache.maven.model.Model) FileReader(java.io.FileReader) UserException(org.bimserver.shared.exceptions.UserException)

Example 53 with MavenXpp3Reader

use of org.eclipse.ceylon.aether.apache.maven.model.io.xpp3.MavenXpp3Reader in project BIMserver by opensourceBIM.

the class PluginBundleManager method extractPluginBundleFromJar.

public SPluginBundle extractPluginBundleFromJar(Path jarFilePath) throws PluginException {
    String filename = jarFilePath.getFileName().toString();
    PluginBundleVersionIdentifier pluginBundleVersionIdentifier = PluginBundleVersionIdentifier.fromFileName(filename);
    try (JarFile jarFile = new JarFile(jarFilePath.toFile())) {
        String pomLocation = "META-INF/maven/" + pluginBundleVersionIdentifier.getPluginBundleIdentifier().getGroupId() + "/" + pluginBundleVersionIdentifier.getPluginBundleIdentifier().getArtifactId() + "/" + "pom.xml";
        ZipEntry pomEntry = jarFile.getEntry(pomLocation);
        if (pomEntry == null) {
            throw new PluginException("No pom.xml found in JAR file " + jarFilePath.toString() + ", " + pomLocation);
        }
        MavenXpp3Reader mavenreader = new MavenXpp3Reader();
        Model model = mavenreader.read(jarFile.getInputStream(pomEntry));
        SPluginBundle sPluginBundle = new SPluginBundle();
        sPluginBundle.setOrganization(model.getOrganization().getName());
        sPluginBundle.setName(model.getName());
        return sPluginBundle;
    } catch (IOException e) {
        throw new PluginException(e);
    } catch (XmlPullParserException e) {
        throw new PluginException(e);
    }
}
Also used : ZipEntry(java.util.zip.ZipEntry) PluginException(org.bimserver.shared.exceptions.PluginException) Model(org.apache.maven.model.Model) SPluginBundle(org.bimserver.interfaces.objects.SPluginBundle) MavenXpp3Reader(org.apache.maven.model.io.xpp3.MavenXpp3Reader) XmlPullParserException(org.codehaus.plexus.util.xml.pull.XmlPullParserException) IOException(java.io.IOException) JarFile(java.util.jar.JarFile)

Example 54 with MavenXpp3Reader

use of org.eclipse.ceylon.aether.apache.maven.model.io.xpp3.MavenXpp3Reader in project build-info by JFrogDev.

the class PomTransformer method loadNextProperties.

// The nextPomToLoad point to the next pom hierarchy
// load the next pom in chain and his properties
private boolean loadNextProperties() {
    if (nextPomToLoad == null) {
        return false;
    }
    Model model;
    FileReader reader = null;
    MavenXpp3Reader mavenReader = new MavenXpp3Reader();
    try {
        reader = new FileReader(nextPomToLoad);
        model = mavenReader.read(reader);
        Properties properties = model.getProperties();
        for (String key : properties.stringPropertyNames()) {
            if (pomProperties.get(key) == null) {
                pomProperties.put(key, properties.getProperty(key));
            }
        }
        if (model.getParent() != null) {
            nextPomToLoad = StringUtils.substringBeforeLast(nextPomToLoad, java.io.File.separator) + java.io.File.separator + model.getParent().getRelativePath();
        } else {
            nextPomToLoad = null;
        }
    } catch (Exception e) {
        Logger.getLogger(PomTransformer.class.getName()).info("couldn't load pom file at: " + nextPomToLoad);
        return false;
    } finally {
        IOUtils.closeQuietly(reader);
    }
    return true;
}
Also used : Model(org.apache.maven.model.Model) MavenXpp3Reader(org.apache.maven.model.io.xpp3.MavenXpp3Reader) Properties(java.util.Properties) JDOMException(org.jdom.JDOMException)

Example 55 with MavenXpp3Reader

use of org.eclipse.ceylon.aether.apache.maven.model.io.xpp3.MavenXpp3Reader in project build-info by JFrogDev.

the class ProjectReader method readModel.

/**
 * @return Construct a Maven {@link Model} from the pom.
 */
private Model readModel(File pom) throws IOException {
    MavenXpp3Reader reader = new MavenXpp3Reader();
    StringReader stringReader = null;
    try {
        stringReader = new StringReader(Files.toString(pom, Charset.forName("UTF-8")));
        return reader.read(stringReader);
    } catch (XmlPullParserException e) {
        throw new IOException(e);
    } finally {
        IOUtils.closeQuietly(stringReader);
    }
}
Also used : StringReader(java.io.StringReader) MavenXpp3Reader(org.apache.maven.model.io.xpp3.MavenXpp3Reader) XmlPullParserException(org.codehaus.plexus.util.xml.pull.XmlPullParserException) IOException(java.io.IOException)

Aggregations

MavenXpp3Reader (org.apache.maven.model.io.xpp3.MavenXpp3Reader)65 Model (org.apache.maven.model.Model)59 IOException (java.io.IOException)39 XmlPullParserException (org.codehaus.plexus.util.xml.pull.XmlPullParserException)33 FileReader (java.io.FileReader)27 File (java.io.File)18 FileNotFoundException (java.io.FileNotFoundException)17 Reader (java.io.Reader)15 Path (java.nio.file.Path)11 PluginException (org.bimserver.shared.exceptions.PluginException)11 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)10 ArtifactResolutionException (org.eclipse.aether.resolution.ArtifactResolutionException)10 SPluginBundle (org.bimserver.interfaces.objects.SPluginBundle)9 ArtifactDescriptorException (org.eclipse.aether.resolution.ArtifactDescriptorException)9 DelegatingClassLoader (org.bimserver.plugins.classloaders.DelegatingClassLoader)8 InputStream (java.io.InputStream)7 FileInputStream (java.io.FileInputStream)6 DefaultArtifactVersion (org.apache.maven.artifact.versioning.DefaultArtifactVersion)6 ArrayList (java.util.ArrayList)5 JarFile (java.util.jar.JarFile)5