61

I am using a different plugin (ant4eclipse) to jar my files. What is the best way to avoid the maven-jar plugin from executing?

  • I tried to remove the <plugin>maven-jar-plugin</plugin>
  • I tried to <exclude> ** / * < / exclude>
  • I tried to <skip>true</skip>

None worked

unj2
  • 52,135
  • 87
  • 247
  • 375

9 Answers9

60

In Maven 3.0.x (I tried 3.0.2) you can disable maven-jar-plugin by binding the default-jar execution to a nonexistent phase, as @bmargulies suggested. Unfortunately that doesn't work in 2.2.1, but you can prevent it from interfering with your own jar by setting an alternative <finalName> and <classifier> for the default-jar execution; it will still create a jar, but it will be set as a secondary artifact for the project and won't overwrite the one you've created. Here's an example that should work in both Maven 2 and Maven 3:

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>test</groupId>
  <artifactId>test</artifactId>
  <version>0.1-SNAPSHOT</version>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <id>default-jar</id>
            <phase>none</phase>
            <configuration>
              <finalName>unwanted</finalName>
              <classifier>unwanted</classifier>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Once you've disabled maven-jar-plugin, maven-install-plugin may give you trouble too. In Maven 3 it can be disabled the same as maven-jar-plugin: bind default-install to a nonexistent phase. However, in Maven 2 maven-install-plugin requires that the target/classes directory exist, and it will install the dummy jar when there isn't a primary artifact present.

Michael
  • 41,989
  • 11
  • 82
  • 128
peterj
  • 710
  • 5
  • 7
  • 1
    Thanks, this is great. I did the same never with the maven-war-plugin and was able to shut that bad boy down. :-) –  Jul 23 '11 at 01:06
  • 2
    I was confused where you got the `default-jar` execution id from. It took me some time to notice that Maven prints that id during each execution: `[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ myproj ---` In this case it is `default-install`, but it's similar for every other plugin. Thanks for the sample though. – JBert Aug 06 '13 at 10:04
  • More explicitly, the maven-install-plugin problem can be avoided with: ` maven-install-plugin default-install never ` – Jose Duarte Mar 08 '18 at 18:28
  • 3
    The above approach yields [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-install) on project **** : The packaging for this project did not assign a file to the build artifact -> [Help 1] [ – Steve Owens Sep 21 '18 at 17:42
  • is it really impossible to disable this with a command line switch? – Alexander Mills Feb 12 '19 at 00:26
39

This should do the trick - notice the use of <id>default-jar</id> and <phase/>.

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>default-jar</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
OneCricketeer
  • 179,855
  • 19
  • 132
  • 245
redhot
  • 450
  • 5
  • 10
  • 2
    And the same for the maven-install-plugin to prevent *it* complaining that no artifact was produced. – Matthew Wise Jun 24 '14 at 10:29
  • This worked, it looks like this plugin is used by default by mvn package even if it's not explicitly in the pom.xml file...I assume if you include it in pom.xml it overrides the default? – Alexander Mills Feb 12 '19 at 01:21
16

In my case, I only wanted to disable the jar plugin because the jar was empty. You can use the skipIfEmpty option in the plugin configuration

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
        <skipIfEmpty>true</skipIfEmpty>
    </configuration>
</plugin>
bheussler
  • 1,406
  • 2
  • 15
  • 18
10

What happens if you declare this?

<packaging>pom</packaging>

Even if it does what you're looking for, be careful. I'm not sure if there could be negative side effects -- such as other maven projects that depend on your jar not being able to locate it.

Drew Wills
  • 8,408
  • 4
  • 29
  • 40
8

Using maven 3.3.9, the following worked for me:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.2</version>
    <executions>
        <execution>
            <id>default-jar</id>
            <phase>none</phase>
            <configuration>
                <finalName>unwanted</finalName>
                <classifier>unwanted</classifier>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>3.0.0-M1</version>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

So in case of the maven-jar-plugin, I bound it to a non-existent phase. For the maven-install-plugin, I used the "skip" configuration parameter. The documentation about it says: "Set this to true to bypass artifact installation. Use this for artifacts that does not need to be installed in the local repository."

adiga
  • 34,372
  • 9
  • 61
  • 83
Erik Nellessen
  • 402
  • 5
  • 9
4

Explicitly bind the jar plugin to a phase that doesn't exist.

bmargulies
  • 97,814
  • 39
  • 186
  • 310
3

As other's have said, it's not possible to turn it off, other than using <packaging>pom</packaging>, which turns everything off and is probably not what you want.

Even though it will generate twice, a working solution is to bind your jar process to the package phase, as that is guaranteed to run after the default. By overwriting the same JAR file, you'll find that yours is used wherever the original would have been.

Brett Porter
  • 5,827
  • 27
  • 25
0

I am using a different plugin to jar my files. What is the best way to avoid the maven-jar plugin from executing?

First, the jar:jar goal is bound by default on the package phase for a project with a packaging of type jar. Second, there is no way to unbind a plugin bound to a phase. So, if you are using another plugin(?), either accept to produce 2 JARs or change the packaging (but I don't think this will work well).

Pascal Thivent
  • 562,542
  • 136
  • 1,062
  • 1,124
-2
       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>        
Chris
  • 37
  • 1
  • does not work (at least not for me inside IDE using Maven 3.0.4 – ZachOfAllTrades Dec 04 '13 at 22:40
  • 1
    The configuration mentioned above is wrong - I don't see any option on the configuration. There is, however, this option: true Which will work for some use cases - where you have a module that doesn't have any classes of its own - so you don't want the jar - but you do want to leave the packaging set to 'jar' (because setting it to pom confuses Eclipse and Netbeans when you try to launch code that is on the dependency path from this module) https://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html – user2163960 May 14 '15 at 21:21
  • 1
    This is a wrong answer. The skip switch does someting different. Documention says: "Set this to true to bypass unit tests entirely. Its use is NOT RECOMMENDED, but quite convenient on occasion." – hennr May 22 '16 at 12:07