package com.github.eirslett.maven.plugins.frontend.mojo; import java.io.File; import java.util.Collections; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.settings.crypto.SettingsDecrypter; import org.sonatype.plexus.build.incremental.BuildContext; import com.github.eirslett.maven.plugins.frontend.lib.FrontendPluginFactory; import com.github.eirslett.maven.plugins.frontend.lib.ProxyConfig; import com.github.eirslett.maven.plugins.frontend.lib.TaskRunnerException; @Mojo(name = "yarn", defaultPhase = LifecyclePhase.GENERATE_RESOURCES) public final class YarnMojo extends AbstractFrontendMojo { private static final String NPM_REGISTRY_URL = "npmRegistryURL"; /** * npm arguments. Default is "install". */ @Parameter(defaultValue = "", property = "frontend.yarn.arguments", required = false) private String arguments; @Parameter(property = "frontend.yarn.yarnInheritsProxyConfigFromMaven", required = false, defaultValue = "true") private boolean yarnInheritsProxyConfigFromMaven; /** * Registry override, passed as the registry option during npm install if set. */ @Parameter(property = NPM_REGISTRY_URL, required = false, defaultValue = "") private String npmRegistryURL; @Parameter(property = "session", defaultValue = "${session}", readonly = true) private MavenSession session; @Component private BuildContext buildContext; @Component(role = SettingsDecrypter.class) private SettingsDecrypter decrypter; /** * Skips execution of this mojo. */ @Parameter(property = "skip.yarn", defaultValue = "${skip.yarn}") private boolean skip; @Override protected boolean skipExecution() { return this.skip; } @Override public void execute(FrontendPluginFactory factory) throws TaskRunnerException { File packageJson = new File(this.workingDirectory, "package.json"); if (this.buildContext == null || this.buildContext.hasDelta(packageJson) || !this.buildContext.isIncremental()) { ProxyConfig proxyConfig = getProxyConfig(); factory.getYarnRunner(proxyConfig, getRegistryUrl()).execute(this.arguments, this.environmentVariables); } else { getLog().info("Skipping yarn install as package.json unchanged"); } } private ProxyConfig getProxyConfig() { if (this.yarnInheritsProxyConfigFromMaven) { return MojoUtils.getProxyConfig(this.session, this.decrypter); } else { getLog().info("yarn not inheriting proxy config from Maven"); return new ProxyConfig(Collections.<ProxyConfig.Proxy>emptyList()); } } private String getRegistryUrl() { // check to see if overridden via `-D`, otherwise fallback to pom value return System.getProperty(NPM_REGISTRY_URL, this.npmRegistryURL); } }