Skip to content

Commit

Permalink
Merge pull request #6424 from sdedic/micronaut/plugin-upgrade
Browse files Browse the repository at this point in the history
Micronaut 4 build plugin recognized.
  • Loading branch information
sdedic authored Sep 8, 2023
2 parents 7c9889b + 0b93c06 commit f3bbe32
Show file tree
Hide file tree
Showing 11 changed files with 312 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
</folder>
</folder>
<folder name="org-netbeans-modules-maven">
<!-- For Micornaut 3.x -->
<folder name="io.micronaut.build:micronaut-maven-plugin">
<folder name="Lookup">
<file name="maven-project-actions.instance">
Expand All @@ -80,6 +81,20 @@
</file>
</folder>
</folder>
<!-- Micronaut 4.x -->
<folder name="io.micronaut.maven:micronaut-maven-plugin">
<folder name="Lookup">
<file name="maven-project-actions.instance">
<attr name="instanceOf" stringvalue="org.netbeans.spi.project.LookupProvider"/>
<attr name="instanceCreate" methodvalue="org.netbeans.api.maven.MavenActions.forProjectLayer"/>
<attr name="resource" stringvalue="nbres:/org/netbeans/modules/micronaut/resources/micronaut-actions-maven.xml"/>
</file>
<file name="native-image-artifacts.instance">
<attr name="instanceOf" stringvalue="org.netbeans.spi.project.LookupProvider"/>
<attr name="instanceCreate" methodvalue="org.netbeans.modules.micronaut.maven.MicronautPackagingArtifactsImpl.projectLookup"/>
</file>
</folder>
</folder>
<folder name="org.springframework.boot:spring-boot-maven-plugin">
<folder name="Lookup">
<file name="maven-project-actions.instance">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Thumbs.db
.DS_Store
.gradle
build/
target/
out/
.micronaut/
.idea
*.iml
*.ipr
*.iws
.project
.settings
.classpath
.factorypath
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## Micronaut 4.1.0 Documentation

- [User Guide](https://docs.micronaut.io/4.1.0/guide/index.html)
- [API Reference](https://docs.micronaut.io/4.1.0/api/index.html)
- [Configuration Reference](https://docs.micronaut.io/4.1.0/guide/configurationreference.html)
- [Micronaut Guides](https://guides.micronaut.io/index.html)
---

- [Micronaut Maven Plugin documentation](https://micronaut-projects.github.io/micronaut-maven-plugin/latest/)
## Feature maven-enforcer-plugin documentation

- [https://maven.apache.org/enforcer/maven-enforcer-plugin/](https://maven.apache.org/enforcer/maven-enforcer-plugin/)


## Feature micronaut-aot documentation

- [Micronaut AOT documentation](https://micronaut-projects.github.io/micronaut-aot/latest/guide/)


## Feature serialization-jackson documentation

- [Micronaut Serialization Jackson Core documentation](https://micronaut-projects.github.io/micronaut-serialization/latest/guide/)


Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# AOT configuration properties for jar packaging
# Please review carefully the optimizations enabled below
# Check https://micronaut-projects.github.io/micronaut-aot/latest/guide/ for more details

# Caches environment property values: environment properties will be deemed immutable after application startup.
cached.environment.enabled=true

# Precomputes Micronaut configuration property keys from the current environment variables
precompute.environment.properties.enabled=true

# Converts YAML configuration files to Java configuration
yaml.to.java.config.enabled=true

# Scans for service types ahead-of-time, avoiding classpath scanning at startup
serviceloading.jit.enabled=true

# Scans reactive types at build time instead of runtime
scan.reactive.types.enabled=true

# Deduces the environment at build time instead of runtime
deduce.environment.enabled=true

# Checks of existence of some types at build time instead of runtime
known.missing.types.enabled=true

# Precomputes property sources at build time
sealed.property.source.enabled=true

# The list of service types to be scanned (comma separated)
service.types=io.micronaut.context.env.PropertySourceLoader,io.micronaut.inject.BeanConfiguration,io.micronaut.inject.BeanDefinitionReference,io.micronaut.http.HttpRequestFactory,io.micronaut.http.HttpResponseFactory,io.micronaut.core.beans.BeanIntrospectionReference

# A list of types that the AOT analyzer needs to check for existence (comma separated)
known.missing.types.list=io.reactivex.Observable,reactor.core.publisher.Flux,kotlinx.coroutines.flow.Flow,io.reactivex.rxjava3.core.Flowable,io.reactivex.rxjava3.core.Observable,io.reactivex.Single,reactor.core.publisher.Mono,io.reactivex.Maybe,io.reactivex.rxjava3.core.Single,io.reactivex.rxjava3.core.Maybe,io.reactivex.Completable,io.reactivex.rxjava3.core.Completable,io.methvin.watchservice.MacOSXListeningWatchService,io.micronaut.core.async.publisher.CompletableFuturePublisher,io.micronaut.core.async.publisher.Publishers.JustPublisher,io.micronaut.core.async.subscriber.Completable

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
applicationType: default
defaultPackage: com.example
testFramework: junit
sourceLanguage: java
buildTool: maven
features: [app-name, http-client-test, java, java-application, junit, logback, maven, maven-enforcer-plugin, micronaut-aot, netty-server, properties, readme, serialization-jackson, shade]
112 changes: 112 additions & 0 deletions enterprise/micronaut/test/unit/data/maven/micronaut4/simple/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>micronaut4test</artifactId>
<version>0.1</version>
<packaging>${packaging}</packaging>

<parent>
<groupId>io.micronaut.platform</groupId>
<artifactId>micronaut-parent</artifactId>
<version>4.1.0</version>
</parent>
<properties>
<packaging>jar</packaging>
<jdk.version>17</jdk.version>
<release.version>17</release.version>
<micronaut.version>4.1.0</micronaut.version>
<micronaut.aot.enabled>false</micronaut.aot.enabled>
<micronaut.aot.packageName>com.example.aot.generated</micronaut.aot.packageName>
<micronaut.runtime>netty</micronaut.runtime>
<exec.mainClass>com.example.Application</exec.mainClass>
</properties>

<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-http-server-netty</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.micronaut.serde</groupId>
<artifactId>micronaut-serde-jackson</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-http-client</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.micronaut.test</groupId>
<artifactId>micronaut-test-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.micronaut.maven</groupId>
<artifactId>micronaut-maven-plugin</artifactId>
<configuration>
<configFile>aot-${packaging}.properties</configFile>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- Uncomment to enable incremental compilation -->
<!-- <useIncrementalCompilation>false</useIncrementalCompilation> -->

<annotationProcessorPaths combine.children="append">
<path>
<groupId>io.micronaut.serde</groupId>
<artifactId>micronaut-serde-processor</artifactId>
<version>${micronaut.serialization.version}</version>
<exclusions>
<exclusion>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-inject</artifactId>
</exclusion>
</exclusions>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-Amicronaut.processing.group=com.example</arg>
<arg>-Amicronaut.processing.module=demoTestForSvata</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example;

import io.micronaut.runtime.Micronaut;

public class Application {

public static void main(String[] args) {
Micronaut.run(Application.class, args);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#Wed Sep 06 13:10:29 GMT 2023
micronaut.application.name=demoTestForSvata
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.example;

import io.micronaut.runtime.EmbeddedApplication;
import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;

import jakarta.inject.Inject;

@MicronautTest
class DemoTestForSvataTest {

@Inject
EmbeddedApplication<?> application;

@Test
void testItWorks() {
Assertions.assertTrue(application.isRunning());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,14 @@
import org.netbeans.api.project.ProjectManager;
import org.netbeans.api.project.ui.OpenProjects;
import org.netbeans.junit.NbTestCase;
import org.netbeans.modules.maven.api.MavenConfiguration;
import org.netbeans.modules.parsing.impl.indexing.implspi.ActiveDocumentProvider;
import org.netbeans.modules.project.dependency.ArtifactSpec;
import org.netbeans.modules.project.dependency.ProjectArtifactsQuery;
import org.netbeans.spi.project.ActionProgress;
import org.netbeans.spi.project.ActionProvider;
import org.netbeans.spi.project.ProjectConfiguration;
import org.netbeans.spi.project.ProjectConfigurationProvider;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.modules.DummyInstalledFileLocator;
Expand Down Expand Up @@ -158,7 +161,7 @@ public void testProjectArtifactWithNormalQuery() throws Exception {
FileObject testApp = dataFO.getFileObject("maven/artifacts/simple");
FileObject prjCopy = FileUtil.copyFile(testApp, FileUtil.toFileObject(getWorkDir()), "simple");

Project p = ProjectManager.getDefault().findProject(prjCopy);
Project p = openAndPrimeProject(prjCopy);
ProjectArtifactsQuery.ArtifactsResult ar = ProjectArtifactsQuery.findArtifacts(p, ProjectArtifactsQuery.newQuery(null));

assertNotNull(ar);
Expand All @@ -176,7 +179,7 @@ public void testProjectNoArtifactForNonExistingNativeBuild() throws Exception {
FileObject testApp = dataFO.getFileObject("maven/artifacts/simple");
FileObject prjCopy = FileUtil.copyFile(testApp, FileUtil.toFileObject(getWorkDir()), "simple");

Project p = ProjectManager.getDefault().findProject(prjCopy);
Project p = openAndPrimeProject(prjCopy);
ProjectArtifactsQuery.ArtifactsResult ar = ProjectArtifactsQuery.findArtifacts(p,
ProjectArtifactsQuery.newQuery(null, null,
ProjectActionContext.newBuilder(p).forProjectAction("native-build").context())
Expand All @@ -195,7 +198,7 @@ public void testProjectArtifactOptionalNativePackaging() throws Exception {
FileObject testApp = dataFO.getFileObject("maven/artifacts/native-optional");
FileObject prjCopy = FileUtil.copyFile(testApp, FileUtil.toFileObject(getWorkDir()), "native-optional");

Project p = ProjectManager.getDefault().findProject(prjCopy);
Project p = openAndPrimeProject(prjCopy);
ProjectArtifactsQuery.ArtifactsResult ar = ProjectArtifactsQuery.findArtifacts(p, ProjectArtifactsQuery.newQuery(null));

assertNotNull(ar);
Expand All @@ -213,7 +216,7 @@ public void testAllArtifactOptionalNativePackaging() throws Exception {
FileObject testApp = dataFO.getFileObject("maven/artifacts/native-optional");
FileObject prjCopy = FileUtil.copyFile(testApp, FileUtil.toFileObject(getWorkDir()), "native-optional");

Project p = ProjectManager.getDefault().findProject(prjCopy);
Project p = openAndPrimeProject(prjCopy);
ProjectArtifactsQuery.ArtifactsResult ar = ProjectArtifactsQuery.findArtifacts(p, ProjectArtifactsQuery.newQuery(ProjectArtifactsQuery.Filter.TYPE_ALL));

assertNotNull(ar);
Expand Down Expand Up @@ -312,4 +315,56 @@ public void testAllArtifactsWithNativePackaging() throws Exception {
assertNotNull("Exe should be present", jar);
assertFalse("Exe should not contain the version",exe.getLocation().toString().contains("0.1"));
}

/**
* Checks that non-Micronaut project does not provide 'micronaut-auto' profile.
* @throws Exception
*/
public void testNoMicronautNodevModeConfiguration() throws Exception {
FileUtil.toFileObject(getWorkDir()).refresh();

FileObject testApp = dataFO.getFileObject("maven/artifacts/simple");
FileObject prjCopy = FileUtil.copyFile(testApp, FileUtil.toFileObject(getWorkDir()), "simple");

Project p = openAndPrimeProject(prjCopy);
assertFalse(findMicronautProfile(p));
}

/**
* Checks that Micronaut 3.x style projects (with io.micronaut.build: plugin) is recognized.
*/
public void testMicronaut3DevModeConfiguration() throws Exception {
FileUtil.toFileObject(getWorkDir()).refresh();

FileObject testApp = dataFO.getFileObject("maven/artifacts/native-optional");
FileObject prjCopy = FileUtil.copyFile(testApp, FileUtil.toFileObject(getWorkDir()), "mn-simple");

Project p = openAndPrimeProject(prjCopy);
assertTrue(findMicronautProfile(p));
}

boolean findMicronautProfile(Project p) {
ProjectConfigurationProvider<MavenConfiguration> pcp = p.getLookup().lookup(ProjectConfigurationProvider.class);
assertNotNull(pcp);

for (MavenConfiguration cfg : pcp.getConfigurations()) {
if (cfg.getDisplayName().toLowerCase().contains("micronaut")) {
return true;
}
}
return false;
}

/**
* Checks that Micronaut 4.x style projects (with io.micronaut.maven: plugin) is recognized.
*/
public void testMicronaut4DevModeConfiguration() throws Exception {
FileUtil.toFileObject(getWorkDir()).refresh();

FileObject testApp = dataFO.getFileObject("maven/micronaut4/simple");
FileObject prjCopy = FileUtil.copyFile(testApp, FileUtil.toFileObject(getWorkDir()), "mn4-simple");

Project p = openAndPrimeProject(prjCopy);
assertTrue(findMicronautProfile(p));
}
}

0 comments on commit f3bbe32

Please sign in to comment.