Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法让maven war插件排除jaxb JAR_Java_Maven_Jaxb_Maven 3_War - Fatal编程技术网

Java 无法让maven war插件排除jaxb JAR

Java 无法让maven war插件排除jaxb JAR,java,maven,jaxb,maven-3,war,Java,Maven,Jaxb,Maven 3,War,我正在尝试使用Maven war插件的功能 这是我的配置: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.2</version> &l

我正在尝试使用Maven war插件的功能

这是我的配置:

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Implementation-Version>${project.artifactId}-${project.version}-r${buildNumber}</Implementation-Version>
                        <Implementation-Buildtime>${timestamp}</Implementation-Buildtime>
                    </manifestEntries>
                </archive>

                <packagingExcludes>WEB-INF/lib/jaxb*.jar</packagingExcludes>
            </configuration>
        </plugin>
打包在my.war WEB-INF/lib目录中

我用的是Maven 3

非常感谢您的帮助

提前感谢,

回答gkamal的评论

当我运行mvn war:war-X时,我可以看到:

[DEBUG] Processing: jaxb-api-2.1.jar
[DEBUG]  + WEB-INF/lib/jaxb-api-2.1.jar has been copied.
[DEBUG] Processing: jaxb-impl-2.1.3.jar
[DEBUG]  + WEB-INF/lib/jaxb-impl-2.1.3.jar has been copied.


没有,例外、警告或错误,或者没有任何可疑的东西,我应该寻找什么具体的东西

这意味着您在项目中将它们作为依赖项,以便将它们打包到war中。只需删除依赖项,这样它们就不会被打包了

根据您使用的选项文档,您必须使用regex,这意味着您应该编写:

<packagingExcludes>WEB-INF/lib/jaxb.*</packagingExcludes>
而不是

<packagingExcludes>WEB-INF/lib/jaxb*.jar</packagingExcludes>

这意味着您在项目中将它们作为依赖项,以便将它们打包到war中。只需删除依赖项,这样它们就不会被打包了

根据您使用的选项文档,您必须使用regex,这意味着您应该编写:

<packagingExcludes>WEB-INF/lib/jaxb.*</packagingExcludes>
而不是

<packagingExcludes>WEB-INF/lib/jaxb*.jar</packagingExcludes>

对于可传递依赖项,可以使用Exclutions元素将其排除

<dependency>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <exclusions>
        <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api-2.1</artifactId>
        </exclusion>
    </exclusions>
</dependency> 

对于可传递依赖项,可以使用Exclutions元素将其排除

<dependency>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <exclusions>
        <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api-2.1</artifactId>
        </exclusion>
    </exclusions>
</dependency> 

关于@gkamal对您的问题08/05的评论/12@11:52,检查maven war插件的版本。我自己刚刚花了2小时研究这个问题,以排除javaeeapi*.jar的未知瞬态

在maven 3.0.4中,我默认使用maven war插件版本2.1,您可以判断是否在调试中运行构建-例如mvn clean package-X。您的另一个评论是正确的,其中一个评论说包排除是在这之后出现的。尽管描述条目的实际页面没有指出版本信息,但这是非常糟糕的,因为这是您第一次搜索的内容

如果将maven war插件更新为2.3 add 2.3,则应使用打包排除。请注意,尽管您只会在构建的war的WEB-INF/lib中看到这一点,但在瞬态war目录中不会看到这一点,该目录包含被排除的JAR,即使debug说它们将被排除,这在查看此问题时非常混乱

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    ...
    <packagingExcludes>
      WEB-INF/lib/whatever-*.jar,
      WEB-INF/lib/javaee-api-*.jar
    </packagingExcludes>
    ...
  </plugin>
  ...
然而,就最佳实践而言,这可能是从战争中排除JAR的最后一搏,而对临时JAR的依赖级别排除可能是最精确和正确的方法。也就是说,如果一个临时jar是由多个依赖项引入的呢


因此,随着版本升级,我认为的解决方案是好的,并且指出它将不起作用的评论是错误的。然而,我认为最佳实践是根据您接受的答案使用依赖级别排除。

关于@gkamal对您的问题08/05的评论/12@11:52,检查maven war插件的版本。我自己刚刚花了2小时研究这个问题,以排除javaeeapi*.jar的未知瞬态

在maven 3.0.4中,我默认使用maven war插件版本2.1,您可以判断是否在调试中运行构建-例如mvn clean package-X。您的另一个评论是正确的,其中一个评论说包排除是在这之后出现的。尽管描述条目的实际页面没有指出版本信息,但这是非常糟糕的,因为这是您第一次搜索的内容

如果将maven war插件更新为2.3 add 2.3,则应使用打包排除。请注意,尽管您只会在构建的war的WEB-INF/lib中看到这一点,但在瞬态war目录中不会看到这一点,该目录包含被排除的JAR,即使debug说它们将被排除,这在查看此问题时非常混乱

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    ...
    <packagingExcludes>
      WEB-INF/lib/whatever-*.jar,
      WEB-INF/lib/javaee-api-*.jar
    </packagingExcludes>
    ...
  </plugin>
  ...
然而,就最佳实践而言,这可能是从战争中排除JAR的最后一搏,而对临时JAR的依赖级别排除可能是最精确和正确的方法。也就是说,如果一个临时jar是由多个依赖项引入的呢


因此,随着版本升级,我认为的解决方案是好的,并且指出它将不起作用的评论是错误的。然而,我认为最佳实践是根据您接受的答案使用依赖级别排除。

您可以通过指定内部来实现这一点


您也可以通过通配符和正则表达式指定路径。有关详细信息,请参见此部分。

您可以通过指定inside来完成此操作


您也可以通过通配符和正则表达式指定路径。有关详细信息,请参见此。

使用-X运行它,看看是否可以获得信息-您可以运行war:war。@gkamal我看不到任何异常。您可以尝试使用其中一个JAR的完整路径而不是通配符吗?您使用的插件版本是什么?文档在版本2.1-alpha-1中说明了这一点,这被错误地命名为warSourceExcludes-另一种修复方法是将两个JAR的显式依赖项添加到war项目中,并将范围标记为所提供的。使用-X运行它,看看是否可以获得信息-您可以只运行war:war。@gkamal我看不到任何异常。您可以尝试使用一个JAR的完整路径吗
f JAR而不是通配符?您使用的插件版本是什么?文档中说,在版本2.1-alpha-1中,这被错误地命名为warSourceExcludes-另一种修复方法是将两个JAR的显式依赖项添加到war项目中,并将范围标记为提供的。否。我们没有依赖关系。依赖关系是可传递的,这意味着我们使用的库使用JAXB实现,我们希望使用JDK实现。我确实尝试了WEB-INF/lib/JAXB.*以获得相同的结果。我也不知道文档中说明应该使用正则表达式的地方。语法**/*.xml不是正则表达式,它是文档中的一个示例。。据我所知,这种可传递依赖关系不起作用。您必须添加获取jaxb DEP的依赖项,并在依赖项本身中进行排除。非常感谢,我将尝试一下。如果你有时间的话,请把这个添加到你的答案中好吗?不,我们没有依赖关系。依赖关系是可传递的,这意味着我们使用的库使用JAXB实现,我们希望使用JDK实现。我确实尝试了WEB-INF/lib/JAXB.*以获得相同的结果。我也不知道文档中说明应该使用正则表达式的地方。语法**/*.xml不是正则表达式,它是文档中的一个示例。。据我所知,这种可传递依赖关系不起作用。您必须添加获取jaxb DEP的依赖项,并在依赖项本身中进行排除。非常感谢,我将尝试一下。如果你有时间的话,你能把这个添加到你的答案中吗?接受这个,因为它看起来更清晰,并且有更多的选择,只有个人意见,两个答案在我看来都是正确的。接受这个,因为它看起来更清晰,只有更多的选择,我认为两个答案都是正确的。
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.0</version>
        <configuration>
          <packagingExcludes>
            WEB-INF/lib/ex1-*.jar,
            WEB-INF/lib/ex2-logging-*.jar
          </packagingExcludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>