Skip to content

Commit

Permalink
Reproducer for apache#33 Maven mojo change ignored
Browse files Browse the repository at this point in the history
  • Loading branch information
ppalaga committed Jun 28, 2020
1 parent 973ba96 commit 6fa3b9a
Show file tree
Hide file tree
Showing 8 changed files with 308 additions and 0 deletions.
@@ -0,0 +1,85 @@
/*
* Copyright 2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.fuse.mvnd.it;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;

import javax.inject.Inject;

import org.assertj.core.api.Assertions;
import org.jboss.fuse.mvnd.client.Client;
import org.jboss.fuse.mvnd.client.ClientLayout;
import org.jboss.fuse.mvnd.client.ClientOutput;
import org.jboss.fuse.mvnd.junit.MvndNativeTest;
import org.jboss.fuse.mvnd.junit.MvndTest;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

@MvndNativeTest(projectDir = "src/test/projects/module-and-plugin")
public class ModuleAndPluginNativeIT {

@Inject
Client client;

@Inject
ClientLayout layout;

@Test
void cleanInstall() throws IOException, InterruptedException {
final Path helloPath = layout.multiModuleProjectDirectory().resolve("hello/target/hello.txt");
try {
Files.deleteIfExists(helloPath);
} catch (IOException e) {
throw new RuntimeException("Could not delete " + helloPath);
}

final Path localMavenRepo = layout.getLocalMavenRepository();
final Path[] installedJars = {
localMavenRepo.resolve("org/jboss/fuse/mvnd/test/module-and-plugin/module-and-plugin-maven-plugin/0.0.1-SNAPSHOT/module-and-plugin-maven-plugin-0.0.1-SNAPSHOT.jar"),
};
Stream.of(installedJars).forEach(jar -> Assertions.assertThat(jar).doesNotExist());

/* Build #1: with "Hello" output to target/hello.txt */
{
final ClientOutput output = Mockito.mock(ClientOutput.class);
client.execute(output, "clean", "install", "-e").assertSuccess();

Assertions.assertThat(helloPath).exists();
Assertions.assertThat(helloPath).usingCharset(StandardCharsets.UTF_8).hasContent("Hello");
Stream.of(installedJars).forEach(jar -> Assertions.assertThat(jar).exists());
}

/* Build #2: with the mojo source changed to output "Hi" to target/hello.txt */
{
final Path mojoPath = layout.multiModuleProjectDirectory().resolve("plugin/src/main/java/org/jboss/fuse/mvnd/test/module/plugin/mojo/HelloMojo.java");
String mojoSource = new String(Files.readAllBytes(mojoPath), StandardCharsets.UTF_8);
mojoSource = mojoSource.replace("\"Hello\".getBytes", "\"Hi\".getBytes");
Files.write(mojoPath, mojoSource.getBytes(StandardCharsets.UTF_8));

final ClientOutput output = Mockito.mock(ClientOutput.class);
client.execute(output, "clean", "install", "-e").assertSuccess();

Assertions.assertThat(helloPath).exists();
Assertions.assertThat(helloPath).usingCharset(StandardCharsets.UTF_8).hasContent("Hi");
Stream.of(installedJars).forEach(jar -> Assertions.assertThat(jar).exists());
}

}
}
@@ -0,0 +1,23 @@
/*
* Copyright 2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.fuse.mvnd.it;

import org.jboss.fuse.mvnd.junit.MvndTest;

@MvndTest(projectDir = "src/test/projects/module-and-plugin")
public class ModuleAndPluginTest extends ModuleAndPluginNativeIT {

}
@@ -0,0 +1,44 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jboss.fuse.mvnd.test.module-and-plugin</groupId>
<artifactId>module-and-plugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<artifactId>module-and-plugin-hello</artifactId>

<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.jboss.fuse.mvnd.test.module-and-plugin</groupId>
<artifactId>module-and-plugin-maven-plugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<executions>
<execution>
<id>hello</id>
<goals>
<goal>hello</goal>
</goals>
<phase>compile</phase>
<configuration>
<file>${basedir}/target/hello.txt</file>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

</project>
@@ -0,0 +1,9 @@
package org.jboss.fuse.mvnd.test.multi.module.hello;

public class Hello {

public String greet() {
return "Hello";
}

}
@@ -0,0 +1,23 @@
package org.jboss.fuse.mvnd.test.multi.module.hello;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class HelloTest {

@Test
void greet() throws IOException {
final String actual = new Hello().greet();
Assertions.assertEquals("Hello", actual);

/* Make sure the plugin was run before this test */
final String content = new String(Files.readAllBytes(Paths.get("target/hello.txt")), StandardCharsets.UTF_8);
Assertions.assertTrue("Hi".equals(content) || "Hello".equals(content));
}

}
@@ -0,0 +1,29 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jboss.fuse.mvnd.test.module-and-plugin</groupId>
<artifactId>module-and-plugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<artifactId>module-and-plugin-maven-plugin</artifactId>
<packaging>maven-plugin</packaging>

<dependencies>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<scope>provided</scope>
<version>3.5</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.6.0</version>
</dependency>

</dependencies>

</project>
@@ -0,0 +1,36 @@
package org.jboss.fuse.mvnd.test.module.plugin.mojo;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;

/**
*/
@Mojo(name = "hello", requiresProject = true)
public class HelloMojo extends AbstractMojo {

@Parameter
File file;

@Override
public void execute() throws MojoExecutionException, MojoFailureException {

try {
final Path path = file.toPath();
Files.createDirectories(path.getParent());
Files.write(path, "Hello".getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
throw new RuntimeException("", e);
}

}

}
59 changes: 59 additions & 0 deletions integration-tests/src/test/projects/module-and-plugin/pom.xml
@@ -0,0 +1,59 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>org.jboss.fuse.mvnd.test.module-and-plugin</groupId>
<artifactId>module-and-plugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>

<maven-clean-plugin.version>2.5</maven-clean-plugin.version>
<maven-compiler-plugin.version>3.1</maven-compiler-plugin.version>
<maven-install-plugin.version>2.4</maven-install-plugin.version>
<maven-resources-plugin.version>2.6</maven-resources-plugin.version>
<maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>
</properties>

<modules>
<module>hello</module>
<module>plugin</module>
</modules>

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>${maven-clean-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>${maven-install-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>

</project>

0 comments on commit 6fa3b9a

Please sign in to comment.