Hi. I have a custom plugin that inserts some extra files into the jars produced by the jar plugin. Because of the way the plugin works, it will fail if it tries to make the modifications to a jar file that has already had the modifications made. For reasons that aren't really relevant here, modifying the plugin to cope with jars that have been modified isn't feasible.
The simplest way to resolve this issue seems to be to have the clean plugin delete any existing jar file unconditionally (so if the user doesn't specify "clean" on the command line, the module is cleaned anyway and the plugin doesn't have to receive an already-edited jar). Anyway, the following pom file unconditonally runs the clean plugin in the initialize phase: <?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.io7m.example</groupId> <artifactId>init-test</artifactId> <version>0.1.0</version> <packaging>jar</packaging> <prerequisites> <maven>3.0.3</maven> </prerequisites> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencies> </dependencies> <build> <plugins> <!-- Clean all artifacts automatically at the start of the build. --> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <executions> <execution> <id>auto-clean</id> <phase>initialize</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> <!-- Create source jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>jar</goal> <goal>test-jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project> This would be fine, except that if you attempt to run the above pom with "mvn verify", the maven-source-plugin will cause the maven-clean-plugin to be executed twice: [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building init-test 0.1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (auto-clean) @ init-test --- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ init-test --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /tmp/sandbox/init-test/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ init-test --- [INFO] No sources to compile [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ init-test --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /tmp/sandbox/init-test/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ init-test --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ init-test --- [INFO] No tests to run. [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ init-test --- [WARNING] JAR will be empty - no content was marked for inclusion! [INFO] Building jar: /tmp/sandbox/init-test/target/init-test-0.1.0.jar [INFO] [INFO] >>> maven-source-plugin:2.2.1:jar (default) > generate-sources @ init-test >>> [INFO] [INFO] --- maven-clean-plugin:2.5:clean (auto-clean) @ init-test --- [INFO] Deleting /tmp/sandbox/init-test/target [INFO] [INFO] <<< maven-source-plugin:2.2.1:jar (default) < generate-sources @ init-test <<< [INFO] [INFO] --- maven-source-plugin:2.2.1:jar (default) @ init-test --- [INFO] No sources in project. Archive not created. [INFO] [INFO] >>> maven-source-plugin:2.2.1:test-jar (default) > generate-sources @ init-test >>> [INFO] [INFO] --- maven-clean-plugin:2.5:clean (auto-clean) @ init-test --- [INFO] [INFO] <<< maven-source-plugin:2.2.1:test-jar (default) < generate-sources @ init-test <<< [INFO] [INFO] --- maven-source-plugin:2.2.1:test-jar (default) @ init-test --- [INFO] No sources in project. Archive not created. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.925 s [INFO] Finished at: 2015-01-15T16:05:19+00:00 [INFO] Final Memory: 10M/228M [INFO] -------------------------------------------------------- Note how auto-clean appears three times! In practice, this means that auto-clean runs at the start of the build, and then is usually run again at some point after the maven-jar-plugin is executed, deleting the jar file. Is there any way to stop this from occurring? M --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
