什么是避免maven-jar的最佳方法?

unj*_*nj2 44 java ant maven-2 jar maven-plugin

我使用不同的插件(ant4eclipse)来装箱我的文件.避免maven-jar插件执行的最佳方法是什么?

  • 我试图删除 <plugin>maven-jar-plugin</plugin>
  • 我试过了 <exclude> ** / * < / exclude>
  • 我试过了 <skip>true</skip>

没有用

小智 49

在Maven 3.0.x(我尝试过3.0.2)中,您可以maven-jar-plugin通过将default-jar执行绑定到不存在的阶段来禁用,如@bmargulies建议的那样.不幸的是,它不是在2.2.1的工作,但你可以阻止它通过设置一个替代用自己的罐子干扰<finalName><classifier>default-jar执行; 它仍将创建一个jar,但它将被设置为项目的辅助工件,不会覆盖您创建的那个.这是一个适用于Maven 2和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>
Run Code Online (Sandbox Code Playgroud)

一旦你禁用了maven-jar-plugin,maven-install-plugin也可能给你带来麻烦.在Maven 3中,它可以被禁用,如maven-jar-plugin:绑定default-install到不存在的阶段.但是,在Maven 2中maven-install-plugin需要该target/classes目录存在,并且当没有主要工件存在时它将安装虚拟jar.

  • 我很困惑你从哪里得到`default-jar`执行id.我花了一些时间才注意到Maven在每次执行时打印了这个id:`[INFO] --- maven-install-plugin:2.3.1:install(default-install)@ myproj ---`在这种情况下它是`default-install`,但它与其他插件类似.谢谢你的样本. (2认同)
  • 上述方法产生 [ERROR] Failed to execute target org.apache.maven.plugins:maven-install-plugin:2.4:install (default-install) on project **** : The Packaging for this project does not assignment a file到构建工件 -&gt; [帮助 1] [ (2认同)

小智 33

这应该做的 - 注意使用<id>default-jar</id><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>
Run Code Online (Sandbox Code Playgroud)

  • 使用阶段`none`来避免XML验证错误. (4认同)
  • 这会产生无效的xml.我的Intelij抱怨xml的有效性 (3认同)
  • 对于maven-install-plugin也是如此,以防止*it*抱怨没有产生任何工件. (2认同)

Dre*_*lls 5

如果您声明了该怎么办?

<packaging>pom</packaging>
Run Code Online (Sandbox Code Playgroud)

即使它满足您的要求,也要小心。我不确定是否会有负面影响-例如其他依赖于jar无法定位的maven项目。


bhe*_*ler 5

就我而言,我只想禁用jar插件,因为jar为空。您可以skipIfEmpty在插件配置中使用该选项

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
        <skipIfEmpty>true</skipIfEmpty>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)


Eri*_*sen 5

使用 maven 3.3.9,以下对我有用:

<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>
Run Code Online (Sandbox Code Playgroud)

所以在 maven-jar-plugin 的情况下,我将它绑定到一个不存在的阶段。对于 maven-install-plugin,我使用了“skip”配置参数。关于它的文档说:“将此设置为 true 以绕过工件安装。将其用于不需要安装在本地存储库中的工件。”