com.liferay.gradle.plugins.workspace.FrontendPlugin Maven / Gradle / Ivy
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
package com.liferay.gradle.plugins.workspace;
import com.liferay.gradle.plugins.LiferayBasePlugin;
import com.liferay.gradle.plugins.node.NodeExtension;
import com.liferay.gradle.plugins.node.NodePlugin;
import com.liferay.gradle.plugins.workspace.internal.util.GradleUtil;
import com.liferay.gradle.util.Validator;
import groovy.json.JsonSlurper;
import groovy.lang.Closure;
import java.io.File;
import java.util.Collections;
import java.util.Map;
import org.gradle.api.GradleException;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.artifacts.ConfigurablePublishArtifact;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.artifacts.dsl.ArtifactHandler;
import org.gradle.api.plugins.BasePlugin;
import org.gradle.api.plugins.BasePluginConvention;
import org.gradle.api.tasks.Copy;
import org.gradle.api.tasks.Delete;
import org.gradle.language.base.plugins.LifecycleBasePlugin;
import org.osgi.framework.Version;
/**
* @author Gregory Amerson
*/
public class FrontendPlugin implements Plugin {
@Override
public void apply(Project project) {
GradleUtil.applyPlugin(project, BasePlugin.class);
GradleUtil.applyPlugin(project, LiferayBasePlugin.class);
LiferayWorkspaceNodePlugin.INSTANCE.apply(project);
Map packageJsonMap = _getPackageJsonMap(project);
_configureArchivesBaseName(project, packageJsonMap);
_configureVersion(project, packageJsonMap);
_configureArtifacts(project);
_configureConfigurationDefault(project);
_configureNodeAndNpmVersion(project);
_configureTaskClean(project);
_configureTaskDeploy(project);
}
private void _configureArchivesBaseName(
Project project, Map packageJsonMap) {
String name = null;
if (packageJsonMap != null) {
name = (String)packageJsonMap.get("name");
}
if (Validator.isNull(name)) {
return;
}
BasePluginConvention basePluginConvention = GradleUtil.getConvention(
project, BasePluginConvention.class);
basePluginConvention.setArchivesBaseName(name);
}
@SuppressWarnings("serial")
private void _configureArtifacts(final Project project) {
ArtifactHandler artifacts = project.getArtifacts();
artifacts.add(
Dependency.ARCHIVES_CONFIGURATION, _getJarFile(project),
new Closure(project) {
@SuppressWarnings("unused")
public void doCall(
ConfigurablePublishArtifact configurablePublishArtifact) {
Task buildTask = GradleUtil.getTask(
project, LifecycleBasePlugin.BUILD_TASK_NAME);
if (GradleUtil.hasTask(
project, NodePlugin.PACKAGE_RUN_BUILD_TASK_NAME)) {
buildTask.dependsOn(
NodePlugin.PACKAGE_RUN_BUILD_TASK_NAME);
}
}
});
}
private void _configureConfigurationDefault(Project project) {
Configuration defaultConfiguration = GradleUtil.getConfiguration(
project, Dependency.DEFAULT_CONFIGURATION);
Configuration archivesConfiguration = GradleUtil.getConfiguration(
project, Dependency.ARCHIVES_CONFIGURATION);
defaultConfiguration.extendsFrom(archivesConfiguration);
}
private void _configureNodeAndNpmVersion(Project project) {
NodeExtension nodeExtension = GradleUtil.getExtension(
project, NodeExtension.class);
String nodeVersion = nodeExtension.getNodeVersion();
try {
Version version = Version.parseVersion(nodeVersion);
if (version.compareTo(_MINIMUM_NODE_VERSION) < 0) {
nodeVersion = _MINIMUM_NODE_VERSION.toString();
nodeExtension.setNodeVersion(nodeVersion);
}
}
catch (Exception exception) {
throw new GradleException(
"Unable to parse node version", exception);
}
String npmVersion = nodeExtension.getNpmVersion();
try {
Version version = Version.parseVersion(nodeVersion);
if (version.compareTo(_MINIMUM_NPM_VERSION) < 0) {
npmVersion = _MINIMUM_NPM_VERSION.toString();
nodeExtension.setNpmVersion(npmVersion);
}
}
catch (Exception exception) {
throw new GradleException("Unable to parse npm version", exception);
}
}
private void _configureTaskClean(Project project) {
Delete delete = (Delete)GradleUtil.getTask(
project, BasePlugin.CLEAN_TASK_NAME);
delete.delete("build", "dist");
}
private void _configureTaskDeploy(Project project) {
Copy copy = (Copy)GradleUtil.getTask(
project, LiferayBasePlugin.DEPLOY_TASK_NAME);
copy.dependsOn("build");
copy.from(_getJarFile(project));
}
private void _configureVersion(
Project project, Map packageJsonMap) {
String version = (String)packageJsonMap.get("version");
if (Validator.isNotNull(version)) {
project.setVersion(version);
}
}
private File _getJarFile(Project project) {
return project.file(
"dist/" + GradleUtil.getArchivesBaseName(project) + "-" +
project.getVersion() + ".jar");
}
@SuppressWarnings("unchecked")
private Map _getPackageJsonMap(Project project) {
File file = project.file("package.json");
if (!file.exists()) {
return Collections.emptyMap();
}
JsonSlurper jsonSlurper = new JsonSlurper();
return (Map)jsonSlurper.parse(file);
}
private static final Version _MINIMUM_NODE_VERSION = Version.parseVersion(
"10.15.3");
private static final Version _MINIMUM_NPM_VERSION = Version.parseVersion(
"6.4.1");
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy