55import net .thebugmc .gradle .sonatypepublisher .CentralPortalExtension ;
66import net .thebugmc .gradle .sonatypepublisher .PublishingType ;
77import net .thebugmc .gradle .sonatypepublisher .SonatypeCentralPortalPublisherPlugin ;
8+ import org .cthing .gradle .plugins .buildconstants .BuildConstantsPlugin ;
9+ import org .cthing .gradle .plugins .buildconstants .BuildConstantsTask ;
810import org .gradle .api .Plugin ;
911import org .gradle .api .Project ;
1012import org .gradle .api .artifacts .dsl .DependencyHandler ;
1113import org .gradle .api .artifacts .dsl .RepositoryHandler ;
1214import org .gradle .api .logging .Logger ;
15+ import org .gradle .api .plugins .ExtensionContainer ;
1316import org .gradle .api .plugins .JavaLibraryPlugin ;
14- import org .gradle .api .plugins .JavaPluginExtension ;
15- import org .gradle .api .plugins .PluginManager ;
1617import org .gradle .api .publish .PublishingExtension ;
17- import org .gradle .api .publish .maven .plugins .MavenPublishPlugin ;
1818import org .gradle .plugins .signing .SigningExtension ;
19- import org .gradle .plugins .signing .SigningPlugin ;
20- import studio .o7 .remora .extensions .RemoraExtension ;
21- import studio .o7 .remora .extensions .framework .FastUtilsExtension ;
22- import studio .o7 .remora .extensions .framework .FrameworkExtension ;
23- import studio .o7 .remora .extensions .framework .LombokExtension ;
24- import studio .o7 .remora .extensions .publish .SonatypeMavenCentralExtension ;
19+ import studio .o7 .remora .extensions .DefaultInformationExtension ;
20+ import studio .o7 .remora .extensions .InformationExtension ;
2521
26- public class RemoraPlugin implements Plugin <Project > {
27-
28- @ Override
29- public void apply (Project project ) {
30- Logger logger = project .getLogger ();
31-
32- applyNecessaryPlugins (logger , project );
33- applyNecessaryRepositories (logger , project );
34-
35- RemoraExtension extension = setupExtension (logger , project );
36-
37- applyNecessaryProjectConfiguration (logger , project , extension );
38- applyJavaPluginConfiguration (logger , project , extension );
39-
40- applyDependencies (logger , project , extension );
41-
42- applyMavenPublishPluginConfiguration (logger , project , extension );
22+ import java .net .URI ;
4323
44- // todo
45- // applyPlaceholderConfiguration(logger, project, extension);
46- }
47-
48- public static RemoraExtension setupExtension (@ NonNull Logger logger , @ NonNull Project project ) {
49- logger .info ("Setting up the `remora` extension" );
50- return project .getExtensions ().create ("remora" , RemoraExtension .class , project .getObjects ());
51- }
52-
53- public static void applyNecessaryProjectConfiguration (@ NonNull Logger logger , @ NonNull Project project , @ NonNull RemoraExtension extension ) {
54- logger .info ("Applying project `group` and `description` configuration" );
55- project .setGroup (extension .getGroupId ());
56- project .setDescription (extension .getDescription ());
57- }
24+ public class RemoraPlugin implements Plugin <Project > {
5825
59- public static void applyJavaPluginConfiguration (@ NonNull Logger logger , @ NonNull Project project , @ NonNull RemoraExtension extension ) {
60- logger .info ("Applying java configuration" );
61- JavaPluginExtension javaExtension = project .getExtensions ().getByType (JavaPluginExtension .class );
62- javaExtension .getToolchain ().getLanguageVersion ().set (extension .getJavaVersion ());
26+ public static InformationExtension setupExtension (@ NonNull Logger logger , @ NonNull ExtensionContainer extensions ) throws IllegalArgumentException {
27+ logger .info ("Setting up the `information` extension" );
28+ return extensions .create ("information" , DefaultInformationExtension .class );
6329 }
6430
6531 public static void applyNecessaryPlugins (@ NonNull Logger logger , @ NonNull Project project ) {
66- logger .info ("Applying necessary plugins `java-library`, `shadow`, `maven-publish `, and `signing `" );
32+ logger .info ("Applying necessary plugins `java-library`, `shadow`, `build-constants `, and `sonatype-central-publisher `" );
6733
68- PluginManager pluginManager = project .getPluginManager ();
34+ var pluginManager = project .getPluginManager ();
6935
7036 pluginManager .apply (JavaLibraryPlugin .class );
7137 pluginManager .apply (ShadowPlugin .class );
72- pluginManager .apply (MavenPublishPlugin .class );
73- pluginManager .apply (SigningPlugin .class );
38+ pluginManager .apply (BuildConstantsPlugin .class );
39+ pluginManager .apply (SonatypeCentralPortalPublisherPlugin .class );
7440 }
7541
7642 public static void applyNecessaryRepositories (@ NonNull Logger logger , @ NonNull Project project ) {
@@ -79,50 +45,45 @@ public static void applyNecessaryRepositories(@NonNull Logger logger, @NonNull P
7945 RepositoryHandler repositories = project .getRepositories ();
8046
8147 repositories .mavenCentral ();
48+ repositories .maven (repo -> {
49+ repo .setName ("papermc" );
50+ repo .setUrl (URI .create ("https://repo.papermc.io/repository/maven-public/" ));
51+ });
52+ repositories .maven (repo -> {
53+ repo .setName ("opencollab-snapshot" );
54+ repo .setUrl (URI .create ("https://repo.opencollab.dev/main/" ));
55+ });
8256 }
8357
84- public static void applyDependencies (@ NonNull Logger logger , @ NonNull Project project , @ NonNull RemoraExtension extension ) {
58+ public static void applyDependencies (@ NonNull Logger logger , @ NonNull Project project ) {
8559 DependencyHandler dependencies = project .getDependencies ();
8660
87- FrameworkExtension framework = extension .getFramework ();
88-
89- LombokExtension lombok = framework .getLombok ();
90- if (lombok .isEnabled ()) {
91- logger .info ("Adding dependency `lombok`" );
92-
93- String id = "org.projectlombok:lombok:" + lombok .getVersion ();
94-
95- dependencies .add ("compileOnly" , id );
96- dependencies .add ("annotationProcessor" , id );
97- }
98-
99- FastUtilsExtension fastUtils = framework .getFastUtils ();
100- if (fastUtils .isEnabled ()) {
101- logger .info ("Adding dependency `fastUtils`" );
102-
103- String id = "it.unimi.dsi:fastutil:" + fastUtils .getVersion ();
104-
105- dependencies .add (fastUtils .getScope ().getConfigurationName (), id );
106- }
61+ logger .info ("Adding dependency `lombok`" );
62+ String lombokId = "org.projectlombok:lombok:1.18.36" ;
63+ dependencies .add ("compileOnly" , lombokId );
64+ dependencies .add ("annotationProcessor" , lombokId );
10765 }
10866
109- public static void applyMavenPublishPluginConfiguration (@ NonNull Logger logger , @ NonNull Project project , RemoraExtension extension ) {
110- SonatypeMavenCentralExtension mavenCentral = extension .getMavenCentral ();
111- if (!mavenCentral .isEnabled ()) return ;
112-
113- logger .info ("Applying necessary singing configuration" );
114-
115- logger .info ("Applying necessary plugin `sonatype-central-publisher`" );
116- project .getPlugins ().apply (SonatypeCentralPortalPublisherPlugin .class );
117-
67+ public static void applyMavenPublishPluginConfiguration (@ NonNull Logger logger , @ NonNull Project project ) {
11868 logger .info ("Configuring `centralPortal` extension" );
11969 project .getExtensions ().configure (CentralPortalExtension .class , centralPortal -> {
12070 centralPortal .getUsername ().set (System .getenv ("SONATYPE_USERNAME" ));
12171 centralPortal .getPassword ().set (System .getenv ("SONATYPE_PASSWORD" ));
122- centralPortal .getName ().set (extension .getArtifactId ());
12372 centralPortal .getPublishingType ().set (PublishingType .USER_MANAGED );
12473 });
12574
75+ project .afterEvaluate (proj -> {
76+ var information = (DefaultInformationExtension ) proj .getExtensions ().getByType (InformationExtension .class );
77+ proj .getExtensions ().configure (CentralPortalExtension .class , centralPortal -> {
78+ centralPortal .getName ().set (proj .getName ());
79+ centralPortal .pom (pom -> {
80+ if (information .url ().isPresent ())
81+ pom .getUrl ().set (information .url ());
82+ information .configurePom (pom );
83+ });
84+ });
85+ });
86+
12687 logger .info ("Configuring `signing` extension" );
12788 project .getExtensions ().configure (SigningExtension .class , signing -> {
12889 signing .useInMemoryPgpKeys (
@@ -133,8 +94,34 @@ public static void applyMavenPublishPluginConfiguration(@NonNull Logger logger,
13394 });
13495 }
13596
136- public static void applyPlaceholderConfiguration (@ NonNull Logger logger , @ NonNull Project project , @ NonNull RemoraExtension extension ) {
137- logger .info ("Applying placeholder replacements" );
97+ public static void applyTaskConfiguration (@ NonNull Logger logger , @ NonNull Project project ) {
98+ logger .info ("Configuring task `generateBuildConstants`" );
99+ project .getTasks ().withType (BuildConstantsTask .class ).configureEach (task -> {
100+ task .getClassname ().set (project .getGroup () + ".BuildConstants" );
101+
102+ var information = project .getExtensions ().getByType (InformationExtension .class );
103+ var additionalConstants = task .getAdditionalConstants ();
104+
105+ if (information .url ().isPresent ())
106+ additionalConstants .put ("PROJECT_URL" , information .url ());
107+ });
108+ }
109+
110+ @ Override
111+ public void apply (Project project ) {
112+ var logger = project .getLogger ();
113+
114+ applyNecessaryRepositories (logger , project );
115+ applyNecessaryPlugins (logger , project );
116+
117+ var extensions = project .getExtensions ();
118+ var extension = setupExtension (logger , extensions );
119+ if (!extension .url ().isPresent ())
120+ extension .url ().set ("https://github.com/XXX/YYY" );
121+
122+ applyDependencies (logger , project );
123+ applyMavenPublishPluginConfiguration (logger , project );
138124
125+ applyTaskConfiguration (logger , project );
139126 }
140127}
0 commit comments