maven-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <org.apache.maven.u...@io7m.com>
Subject source-plugin vs, the initialize phase?
Date Thu, 15 Jan 2015 16:24:04 GMT
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: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Mime
View raw message