2017-08-11 32 views
-2

使用的IntelliJ IDEA(版本2017年2月1日)我在这我想包括slf4jslf4j-binding一个Java/Maven项目内。如何包括SLF4J-简单的神器JAR当构建从IntelliJ IDEA的

我知道StackOverflow是关于slf4j及其缺少绑定的大量问题,但大多数都是指Eclipse。然而,我的问题发生在Intellij下。

pom.xml我列出<dependencies>下:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.25</version> 
</dependency> 
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple --> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <version>1.7.25</version> 
</dependency> 

现在,当我让的IntelliJ打造神器JAR和我然后运行命令行,我得到了(可怕的)错误的JAR:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 

经过检查,JARdoes确实不包含slf4j-simple类(slf4j类虽然存在)。我该如何解决这个问题,指示Intellij合并slf4j-simple作为列表离子pom.xml

为了完整起见,这里完整的项目pom.xml的IntelliJ使用:

<?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>au.gov.acic.travelalert</groupId> 
    <artifactId>extract-data</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 


    <dependencies> 
     <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.25</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.7.25</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --> 
     <dependency> 
      <groupId>commons-beanutils</groupId> 
      <artifactId>commons-beanutils</artifactId> 
      <version>1.9.3</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.6</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 --> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-collections4</artifactId> 
      <version>4.1</version> 
     </dependency>  <dependency> 
      <!-- jsoup HTML parser library @ https://jsoup.org/ --> 
      <groupId>org.jsoup</groupId> 
      <artifactId>jsoup</artifactId> 
      <version>1.10.3</version> 
     </dependency> 
    </dependencies> 

</project> 

最后一点:刚开始时,我成立了项目记录甚至没有工作的IDE内,尽管pom.xml中有正确的条目。但不知何故,在为slf4j-log4j12额外添加(并随后删除)依赖项之后,IDE会挑选slf4j-simple,但在写出制品JAR时仍然不会将其捆绑在一起...

+0

您使用的是maven命令?你的项目中是否有其他的依赖项,并且slf4j是唯一一个没有在你的jar文件中结束的项目? – Michael

+0

如果您正在用'maven'构建'.jar',IDE就无关紧要。你应该发布'.pom'中的所有相关部分,因为当你执行'mvn package'时不包括它' –

+0

@Michael我自己没有发布maven命令 - 我让Intellij使用* artefact - >建立*菜单。 – halloleo

回答

0

问题是IntelliJ的JAR工件XML配置不包含slf4j-simple库。

这解释了IntelliJ找到了lib射线(根据maven根据POM/XML〜下载),并将其用于项目的内部执行,但它并未将其打包到JAR中。

的解决方案是将libarary添加到XML配置,

  • 手动或者,通过编辑XML文件。 (你会发现它[projectroot].idea/artifacts/[projectname_jar.xml下)

  • 通过的IntelliJ的图形用户界面,通过打开文物对话框(文件 - >项目结构 - >文物),然后加入天秤座到输出布局列表。
-1

您可以尝试此解决方案;去home目录并删除.m2目录(隐藏)更新maven项目并尝试重建。并且如果你正在使用(Indigo,Juno和Kepler)版本的eclipse,如果你想在其中使用最新版本或者stil,那么你也可以检查你的eclipse版本,然后你可以参考下面的例子;此stackoverflow链接在这个问题上有最可靠的答案:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". error问题Konstantinos Margaritis和许多java专家的回答。

+1

正如问题中提到的,我不*使用Eclipse。 – halloleo

-1

执行MVN依赖性:树和检查:

  • SLF4J的API和SLF4J-简单的必须存在那里。
  • 没有其他slf4j结合库存在
  • 可以存在slf4j桥(以库名称后缀为“-slf4j”后缀的桥;例如,log4j-over-slf4j)。
  • 确保所有slf4j库版本匹配
  • 确保不存在具有不同版本的重复slf4j库。

如果所有这些都没问题,没有理由在工件上存在slf4j-api,但没有slf4j-simple。你在做什么来打包jar?

+0

我自己并没有发布maven命令 - 我让Intellij使用artefact - > build菜单执行此操作。我将尝试了解我如何在Intellij中发布这个消息 - 或者你知道吗? – halloleo

+0

为什么是负面的?无论如何,是的,我知道你在使用intellij。有什么不同?你可以执行任何maven目标:https://stackoverflow.com/questions/27246065/how-to-execute-mvn-command-using-intellij-idea –

相关问题