All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.jcohy.gradle.conventions.ExtractResources Maven / Gradle / Ivy

package io.github.jcohy.gradle.conventions;

import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.Task;
import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;

import org.springframework.util.FileCopyUtils;
import org.springframework.util.PropertyPlaceholderHelper;

/**
 * Copyright: Copyright (c) 2021
 * jcohy.com
 * 

* Description: {@link Task} 从 classpath 中获取资源并写入磁盘中 * * @author jiac * @version 0.0.5.1 2021/6/11:16:25 * @since 0.0.5.1 */ public class ExtractResources extends DefaultTask { private final PropertyPlaceholderHelper propertyPlaceholderHelper = new PropertyPlaceholderHelper("${", "}"); private final Map properties = new HashMap<>(); private final DirectoryProperty destinationDirectory; private List resourceNames = new ArrayList<>(); public ExtractResources() { this.destinationDirectory = getProject().getObjects().directoryProperty(); } @Input public List getResourceNames() { return this.resourceNames; } public void setResourcesNames(List resourceNames) { this.resourceNames = resourceNames; } @OutputDirectory public DirectoryProperty getDestinationDirectory() { return this.destinationDirectory; } public void property(String name, String value) { this.properties.put(name, value); } @Input public Map getProperties() { return this.properties; } @TaskAction void extractResources() throws IOException { for (String resourceName : this.resourceNames) { InputStream resourceStream = getClass().getClassLoader().getResourceAsStream(resourceName); if (resourceStream == null) { throw new GradleException("Resource '" + resourceName + "' does not exist"); } String resource = FileCopyUtils.copyToString(new InputStreamReader(resourceStream, StandardCharsets.UTF_8)); resource = this.propertyPlaceholderHelper.replacePlaceholders(resource, this.properties::get); FileCopyUtils.copy(resource, new FileWriter(this.destinationDirectory.file(resourceName).get().getAsFile())); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy