2016-09-21 47 views
2

我使用maven打包阴影jar文件罐子。我浏览了其他的帖子,没有找到答案。我不使用提供作为一个元素。行家遮阳帘插件不包括被声明为依赖

我包括log4j的核心是在pom.xml的依赖,但是当Maven遮阳帘插件构建它排除了依赖的类?我下载了该jar的V2.5并进行了检查,包和类都在其中。

我必须排除一些org.slf4j类,但应该不会影响到这一点。

这里是pom.xml中

... 
     <log4j.version>2.5</log4j.version> 
</properties> 
... 
    <dependencies> 
    <dependency> 
     <groupId>de.ruedigermoeller</groupId> 
     <artifactId>kontraktor</artifactId> 
     <version>${kontraktor.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>de.ruedigermoeller</groupId> 
     <artifactId>kontraktor-http</artifactId> 
     <version>${kontraktor.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
... 
     <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>${log4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>${log4j.version}</version> 
    </dependency> 
... 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <finalName>${project.artifactId}-${project.version}</finalName> 
         <filters> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
         </filters> 
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>uk.co.company.quokka.CompanyMain</mainClass> 
          </transformer> 
         </transformers> 
         <minimizeJar>true</minimizeJar> 
         <excludes> 
          <exclude>**/storage/*</exclude> 
          <exclude>**/data/*</exclude> 
          <exclude>**/web/*</exclude> 
         </excludes> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

这里的相关部分被堆栈跟踪:

ERROR StatusLogger Unable to create class org.apache.logging.log4j.core.impl.Log4jContextFactory specified in jar:file:/quokka-0.1-SNAPSHOT.jar!/META-INF/log4j-provider.properties 
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console... 
Properties file full path ../company.properties 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at org.xnio.Xnio.<clinit>(Xnio.java:93) 
    at io.undertow.Undertow.start(Undertow.java:97) 
    at org.nustaq.kontraktor.remoting.http.Http4K.getServer(Http4K.java:94) 
    at org.nustaq.kontraktor.remoting.http.builder.BldFourK.build(BldFourK.java:115) 
    at uk.co.company.quokka.CompanyMain.main(CompanyMain.java:64) 
Caused by: java.lang.IllegalArgumentException: Invalid logger interface org.xnio._private.Messages (implementation not found in [email protected]) 
    at org.jboss.logging.Logger$1.run(Logger.java:2254) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2227) 
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2214) 
    at org.xnio._private.Messages.<clinit>(Messages.java:56) 
    ... 5 more 

回答

1

在我抛弃行家遮阳帘插件和所用的端maven-assembly-plugin,它似乎可以工作,并以一个可用的jar结束。