001/* 002 * JDrupes Builder 003 * Copyright (C) 2025 Michael N. Lipp 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <https://www.gnu.org/licenses/>. 017 */ 018 019package org.jdrupes.builder.mvnrepo; 020 021import java.util.Optional; 022import org.jdrupes.builder.api.CoreProperties; 023import static org.jdrupes.builder.api.CoreProperties.*; 024import org.jdrupes.builder.api.FileTree; 025import static org.jdrupes.builder.api.Intent.Supply; 026import org.jdrupes.builder.api.Project; 027import org.jdrupes.builder.api.ResourceType; 028import org.jdrupes.builder.java.JarBuilder; 029import org.jdrupes.builder.java.JavaSourceFile; 030import static org.jdrupes.builder.java.JavaTypes.SourcesJarFileType; 031import static org.jdrupes.builder.mvnrepo.MvnProperties.ArtifactId; 032 033/// A special [JarBuilder] that generates a sources jar following 034/// the maven convention. 035/// 036/// * The content of the jar is obtained by requesting [FileTree]s 037/// with [JavaSourceFile]s from the project's suppliers. 038/// 039/// * The name of the jar is set to `<artifactId>-<version>-sources.jar`, 040/// where `<artifactId>` is the value of the project's property 041/// [MvnProperties#ArtifactId] with a fallback to the project's name. 042/// `<version>` is the value of the project's property 043/// [CoreProperties#Version]. 044/// 045public class SourcesJarBuilder extends JarBuilder { 046 047 /// Initializes a new sources JAR builder. 048 /// 049 /// @param project the project 050 /// 051 @SuppressWarnings("PMD.ConstructorCallsOverridableMethod") 052 public SourcesJarBuilder(Project project) { 053 super(project, SourcesJarFileType); 054 addTrees(project().resources(of( 055 new ResourceType<FileTree<JavaSourceFile>>() {}).using(Supply))); 056 jarName(Optional.ofNullable(project().get(ArtifactId)) 057 .orElse(project().name()) + "-" + project().get(Version) 058 + "-sources.jar"); 059 } 060 061}