2012-07-11 80 views
4

我觉得这个问题有点愚蠢,但我无法弄清楚如何将SINGLE依赖项(jdom.jar)添加到另一个jar中。如何使用maven和fatjar插件将单个依赖项包含到jar中

上下文:我们为我们的应用程序开发了一个简单的插件,这个插件有很多依赖项。我们使用fatjar将jdom.jar包含进去。我正试图修复这个插件中的一个bug,所以我决定在同一时间“maven化”它。 (我们只是切换到maven)这个插件在运行时加载,所以我们想要打包的唯一依赖是jdom.jar。

问题:我发现有一个maven fatjar插件!不幸的是,我找不到任何文档,这个maven插件将EVERY依赖项添加到输出jar中。经过多次尝试后,我决定放弃这个fatjar插件并搜索另一个插件。我发现一个罐子,阴影,但在他们阅读后,他们看起来像他们添加每个依赖项。

问:你会是一个简单的办法只能jdom.jar添加到我的插件jar是这样的:

 
-MyPlug-in.jar 
| 
|-src 
|-main 
    |-java 
    |-*.java 
|-jdom.jar 

我也不想改变清单或输出罐子名

非常感谢您的时间。

回答

8

这里没有关于如何使用maven将maven-shader-plugin包含一个jar文件的答案。我花了一些时间才弄清楚如何真正做到这一点。这里是一个片段,仅包含来自依赖项com.googlecode.json-simple:json-simple的类。

<project> 
    ... 
    <build> 
     <plugins> 
      ... 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>1.6</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <artifactSet> 
           <includes> 
            <include>com.googlecode.json-simple:json-simple</include> 
           </includes> 
          </artifactSet> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      ... 
     </plugins> 
    </build> 
    ... 
</project> 
+0

正是我所需要的,即使在版本2.4.3中,这个stil也能完美地工作。我在各种''变体上遇到了困难,但最终''artifactSet />'而不是''成功了。 – 2016-05-08 18:58:56

0

对于这种目的,我会建议使用maven-shade-plugin这将创建一个ueber罐,可以通过多种方式进行控制。 随着shade plugin you can exclude things你不喜欢。但是这可能是由于没有使用单独的Maven模块来控制依赖关系。

+0

谢谢你的回答。我知道我的方向是正确的,但我们终于决定以另一种方式进行。看到我的答案。 – drgn 2012-07-12 13:58:40

0

使用maven Shade可以正常工作,单罐也可以完成这项工作。 但是我们最终决定在我们的扩展中封装jdom将是一种不好的做法。

所以不是我们该怎么做:

 
|-Root application Folder 
|-Extension Folder 
    |-MyExtension.jar 
    |-libs Folder 
    |-jdom.jar 

罐子到将动态加载的lib文件夹,如果分机不能找到合适的库到库文件夹将不被加载。

对于那些希望解决我的主要问题的人请查看@khmarbaise答案。

相关问题