private void createDependenciesModule(final Project project, final Dependency dep) { DirectoryResource dependencyDir = getOrCreatePluginDependenciesModuleDirectory(dep); String pluginName = dep.getGroupId() + "." + dep.getArtifactId(); String pluginSlot = dep.getVersion(); FileResource<?> moduleXml = (FileResource<?>) dependencyDir.getChild("module.xml"); moduleXml.delete(); moduleXml.createNewFile(); // <resource-root path="maven-dependency.jar" /> Node module = XMLParser.parse(getClass().getResourceAsStream(MODULE_TEMPLATE_XML)); module.attribute("name", pluginName + ".dependencies"); module.attribute("slot", pluginSlot); Node resources = module.getSingle("resources"); // <module name="org.jboss.forge:main" /> Node dependencies = module.getSingle("dependencies"); dependencies.createChild("module").attribute("name", "javax.api"); dependencies.createChild("module").attribute("name", "org.jboss.forge.shell.api"); writeResourceRoots(project, module, dependencyDir, resources); // Write out the module XML file. moduleXml.setContents(XMLParser.toXMLString(module)); }
private void writeResourceRoots( final Project project, final Node module, final DirectoryResource directory, final Node resources) { List<DependencyResource> pluginDependencies = getPluginDependencies(project, module); for (DependencyResource d : pluginDependencies) { String name = d.getName(); Resource<?> child = directory.getChild(name); child.delete(); FileResource<?> depJar = child.reify(FileResource.class); depJar.setContents(d.getResourceInputStream()); resources.createChild("resource-root").attribute("path", name); } }
@Command(value = "source-plugin", help = "Install a plugin from a local project folder") public void installFromLocalProject( @Option(description = "project directory", required = true) final Resource<?> projectFolder, @Option(name = "coordinates", type = PromptType.DEPENDENCY_ID, description = "the coordinates for the plugin (if in a multi-module repository)") final Dependency coordinates, final PipeOut out) throws Exception { DirectoryResource workspace = projectFolder.reify(DirectoryResource.class); if ((workspace == null) || !workspace.exists()) { throw new IllegalArgumentException("Project folder must be specified."); } pluginManager.installFromProject(workspace, coordinates); ShellMessages.success(out, "Installed from [" + workspace + "] successfully."); restart(); }
boolean dependenciesAsResourceRoot = needDependenciesAsResourceRoot(project); DirectoryResource moduleDir = getOrCreatePluginModuleDirectory(dep); String pluginName = dep.getGroupId() + "." + dep.getArtifactId(); String pluginSlot = dep.getVersion(); writeResourceRoots(project, module, moduleDir, resources); createDependenciesModule(project, dep); registerPlugin(pluginName, pluginSlot, apiVersion);
+ buildDir.getFullyQualifiedName() + "]"); Project pluginProject = findPluginProject(rootProject, coordinates); if (pluginProject == null) createModule( pluginProject, DependencyBuilder.create(dep).setVersion(
@Command(value = "remove-plugin", help = "Removes a plugin from the current Forge runtime configuration") public void removePlugin( @Option(completer = InstalledPluginCompleter.class, description = "plugin-name", required = true, help = "The fully qualified plugin name e.g: 'org.jboss.forge.plugin:version'") final String pluginName, final PipeOut out) throws Exception { if (pluginManager.removePlugin(pluginName)) { ShellMessages.success(out, "Successfully removed [" + pluginName + "]"); restart(); } else { ShellMessages.error(out, "Failed to remove [" + pluginName + ""); } }
tempPluginProject = findPluginProject(moduleProject, coordinates); if (tempPluginProject != null)
+ "], building Plugin from HEAD."); pluginManager.installFromProject(buildDir, coordinates);