You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2019/09/20 15:13:40 UTC

[camel-quarkus] branch master updated: Improve the maven deployment of the synthetic test jars

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/master by this push:
     new 6277cf6  Improve the maven deployment of the synthetic test jars
     new 5086fe6  Merge pull request #206 from ppalaga/i184.2
6277cf6 is described below

commit 6277cf6dc50712a64465b286183d5a964aab7117
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Fri Sep 20 11:56:16 2019 +0200

    Improve the maven deployment of the synthetic test jars
---
 build/scripts/generate-test-poms.groovy         | 101 ++++++++++++++++++++--
 integration-tests/install-reusable-test-jar.txt |   1 -
 integration-tests/pom.xml                       | 110 +++++++-----------------
 pom.xml                                         |   6 ++
 4 files changed, 131 insertions(+), 87 deletions(-)

diff --git a/build/scripts/generate-test-poms.groovy b/build/scripts/generate-test-poms.groovy
index 3380388..4f04a18 100644
--- a/build/scripts/generate-test-poms.groovy
+++ b/build/scripts/generate-test-poms.groovy
@@ -53,15 +53,25 @@
  */
 
 import groovy.io.FileType
+import static org.twdata.maven.mojoexecutor.MojoExecutor.Element
+import static org.twdata.maven.mojoexecutor.MojoExecutor.*
+import org.apache.maven.project.MavenProject
+import org.apache.maven.execution.MavenSession
+import org.apache.maven.model.Plugin
 
-new File(project.basedir, 'target').mkdirs()
+final String command = properties['itest.jar.command']
 
-project.basedir.eachFile FileType.DIRECTORIES, { dir ->
-    final File pomXml = new File(dir, 'pom.xml')
-    if (pomXml.exists()) {
-        def pomXmlProject = new XmlParser().parseText(pomXml.getText('UTF-8'))
+static boolean isItestModule(MavenProject project) {
+    return 'jar'.equals(project.packaging) && new File(project.basedir, 'pom.xml').getText('UTF-8').contains('<goal>native-image</goal>')
+}
+
+static void install(MavenProject project, MavenSession session) {
+
+    if (isItestModule(project)) {
+        def pomXmlProject = new XmlParser().parseText(new File(project.basedir, 'pom.xml').getText('UTF-8'))
         final String oldArtifactId = pomXmlProject.artifactId.text()
         final String newArtifactId = oldArtifactId + '-tests'
+
         pomXmlProject.artifactId[0].value = newArtifactId
 
         pomXmlProject.name.each { n -> n.value = n.text() + ' :: Tests' }
@@ -82,10 +92,89 @@ project.basedir.eachFile FileType.DIRECTORIES, { dir ->
         pomXmlProject.build.each { n -> n.parent().remove(n) }
         pomXmlProject.profiles.each { n -> n.parent().remove(n) }
 
-        new File(project.basedir, 'target/'+ newArtifactId + '-pom.xml').withWriter( 'UTF-8' ) { out ->
+        final File outputPom = newPomPath(project, project.artifactId)
+        outputPom.withWriter( 'UTF-8' ) { out ->
             final XmlNodePrinter printer = new XmlNodePrinter(new PrintWriter(out))
             printer.preserveWhitespace = true
             printer.print(pomXmlProject)
         }
+        final File testJar = testJarPath(project, project.basedir, project.artifactId)
+
+        Class bpmClass = Class.forName("org.apache.maven.plugin.BuildPluginManager");
+        Object buildPluginManager = session.lookup(bpmClass.getName());
+        executeMojo(
+            managedPlugin("org.apache.maven.plugins", "maven-install-plugin", project),
+            goal("install-file"),
+            configuration(
+                element("pomFile", outputPom.toString()),
+                element("version", project.version),
+                element("file", testJar.toString())
+            ),
+            executionEnvironment(
+                project,
+                session,
+                buildPluginManager
+            )
+        )
+    }
+
+}
+
+static Plugin managedPlugin(String groupId, String artifactId, MavenProject project) {
+    for (p in project.build.plugins) {
+        if (groupId.equals(p.groupId) && artifactId.equals(p.artifactId)) {
+            println 'Resolved version ' + p.version + ' for ' + groupId +':'+artifactId
+            return plugin(groupId, artifactId, p.version)
+        }
+    }
+    throw new IllegalStateException('Could not find a managed version of '+ groupId + ':' + artifactId)
+}
+
+
+static File newPomPath(MavenProject project, String oldArtifactId) {
+    return new File(project.basedir, 'target/'+ oldArtifactId + '-tests-pom.xml')
+}
+static File testJarPath(MavenProject project, File oldDir, String oldArtifactId) {
+    return new File(oldDir, 'target/' + oldArtifactId + '-' + project.version + '-tests.jar')
+}
+
+static void deploy(MavenProject project, MavenSession session) {
+    if (isItestModule(project)) {
+        def distManagementRepo = project.version.endsWith('-SNAPSHOT') ? project.distributionManagement.snapshotRepository : project.distributionManagement.repository
+
+        final File outputPom = newPomPath(project, project.artifactId)
+        final File testJar = testJarPath(project, project.basedir, project.artifactId)
+
+        Class bpmClass = Class.forName("org.apache.maven.plugin.BuildPluginManager");
+        Object buildPluginManager = session.lookup(bpmClass.getName());
+
+        List<Element> config = [];
+        config.add(element("repositoryId", distManagementRepo.id))
+        config.add(element("url", distManagementRepo.url))
+        config.add(element("pomFile", outputPom.toString()))
+        config.add(element("version", project.version))
+        config.add(element("file", testJar.toString()))
+
+        final File testSources = new File(testJar.toString().replace('.jar', '-sources.jar'))
+        if (testSources.exists()) {
+            config.add(element("sources", testSources.toString()))
+        }
+        final File testJavaDoc = new File(testJar.toString().replace('.jar', '-javadoc.jar'))
+        if (testJavaDoc.exists()) {
+            config.add(element("javadoc", testJavaDoc.toString()))
+        }
+
+        executeMojo(
+            managedPlugin("org.apache.maven.plugins", "maven-deploy-plugin", project),
+            goal("deploy-file"),
+            configuration(config.toArray(new Element[config.size()])),
+            executionEnvironment(
+                project,
+                session,
+                buildPluginManager
+            )
+        )
     }
 }
+
+
diff --git a/integration-tests/install-reusable-test-jar.txt b/integration-tests/install-reusable-test-jar.txt
deleted file mode 100644
index 47207ce..0000000
--- a/integration-tests/install-reusable-test-jar.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file activates the install-reusable-test-jar profile
\ No newline at end of file
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 93d975a..180bd6e 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -140,96 +140,46 @@
                 <artifactId>groovy-maven-plugin</artifactId>
                 <executions>
                     <execution>
-                        <inherited>false</inherited>
-                        <id>generate-test-poms</id>
+                        <id>install-test-poms</id>
                         <goals>
                             <goal>execute</goal>
                         </goals>
-                        <phase>validate</phase>
+                        <phase>install</phase>
                         <configuration>
-                            <source>file:///${project.basedir}/../build/scripts/generate-test-poms.groovy</source>
+                            <source><![CDATA[
+                                File dir = project.basedir
+                                for (; dir != null && !new File(dir, '.mvn').exists(); dir = dir.getParentFile()) {}
+                                new GroovyShell().parse(new File(dir, 'build/scripts/generate-test-poms.groovy'))
+                                    .install(project, session)
+                            ]]></source>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>deploy-test-poms</id>
+                        <goals>
+                            <goal>execute</goal>
+                        </goals>
+                        <phase>install</phase>
+                        <configuration>
+                            <source><![CDATA[
+                                File dir = project.basedir
+                                for (; dir != null && !new File(dir, '.mvn').exists(); dir = dir.getParentFile()) {}
+                                new GroovyShell().parse(new File(dir, 'build/scripts/generate-test-poms.groovy'))
+                                    .deploy(project, session)
+                            ]]></source>
                         </configuration>
                     </execution>
                 </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.twdata.maven</groupId>
+                        <artifactId>mojo-executor</artifactId>
+                        <version>2.3.0</version>
+                    </dependency>
+                </dependencies>
             </plugin>
         </plugins>
 
     </build>
 
-    <profiles>
-        <profile>
-            <!-- installs and deploys the test jar under a separate artifactId and with a modified pom.
-                 See /build/scripts/generate-test-poms.groovy -->
-            <id>install-reusable-test-jar</id>
-            <activation>
-                <file>
-                    <!-- activate only in the submodules -->
-                    <exists>../install-reusable-test-jar.txt</exists>
-                </file>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-install-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>install-reusable-test-jar</id>
-                                <goals>
-                                    <goal>install-file</goal>
-                                </goals>
-                                <phase>install</phase>
-                                <configuration>
-                                    <pomFile>${basedir}/../target/${project.artifactId}-tests-pom.xml</pomFile>
-                                    <version>${project.version}</version>
-                                    <file>${basedir}/target/${project.artifactId}-${project.version}-tests.jar</file>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.codehaus.gmaven</groupId>
-                        <artifactId>groovy-maven-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>set-deployer-properties</id>
-                                <goals>
-                                    <goal>execute</goal>
-                                </goals>
-                                <phase>deploy</phase>
-                                <configuration>
-                                    <source><![CDATA[
-                                        def distManagementRepo = project.version.endsWith('-SNAPSHOT') ? project.distributionManagement.snapshotRepository : project.distributionManagement.repository
-                                        project.properties.setProperty('deploy.test.jar.repositoryId', distManagementRepo.id)
-                                        project.properties.setProperty('deploy.test.jar.url', distManagementRepo.url)
-                                    ]]></source>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-deploy-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>deploy-reusable-test-jar</id>
-                                <goals>
-                                    <goal>deploy-file</goal>
-                                </goals>
-                                <phase>deploy</phase>
-                                <configuration>
-                                    <repositoryId>${deploy.test.jar.repositoryId}</repositoryId><!-- set via groovy above -->
-                                    <url>${deploy.test.jar.url}</url><!-- set via groovy above -->
-                                    <pomFile>${basedir}/../target/${project.artifactId}-tests-pom.xml</pomFile>
-                                    <version>${project.version}</version>
-                                    <file>${basedir}/target/${project.artifactId}-${project.version}-tests.jar</file>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
 </project>
diff --git a/pom.xml b/pom.xml
index 0159f1d..0a78ec1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -170,6 +170,12 @@
 
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-deploy-plugin</artifactId>
+                    <version>${maven-deploy-plugin.version}</version>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-enforcer-plugin</artifactId>
                     <executions>
                         <execution>