What is the best way to avoid maven-jar?

后端 未结 9 2066
后悔当初
后悔当初 2020-11-27 05:40

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 <
相关标签:
9条回答
  • 2020-11-27 06:08

    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>
    
    0 讨论(0)
  • 2020-11-27 06:09

    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.

    0 讨论(0)
  • 2020-11-27 06:12

    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.

    0 讨论(0)
  • 2020-11-27 06:13

    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.

    0 讨论(0)
  • 2020-11-27 06:13

    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/>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    
    0 讨论(0)
  • 2020-11-27 06:24

    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."

    0 讨论(0)
提交回复
热议问题