apache camel - 打包一个可执行的jar

时间:2014-01-22 04:25:02

标签: maven maven-3 apache-camel maven-plugin executable-jar

我正在使用maven来构建我的jar(Intellij IDEA IDE)。它是使用Apache Camel构建的应用程序。我的pom.xml摘录:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>MainDriver</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

我可以从maven中检索一个jar文件但是在运行后我得到的是NoClassDeFFound错误。

最后,我尝试使用one-jar插件(http://one-jar.sourceforge.net/)。而且我已经开始工作了。我的问题是,如果不使用一个罐子,我可以实现相同的目标吗?我不喜欢一个罐子的包装,它的作用是当你从一个罐子中提取罐子时,你会发现你的app罐子,所以你需要在你的罐子上做一个额外的提取来获得到您的课程/资源。我的配置文件在资源上,有时我需要修改它。

谢谢!

2 个答案:

答案 0 :(得分:7)

maven-shade-plugin使用您的应用程序代码创建一个jar,并将所有依赖项合并到一个jar文件中。这种方法的问题在于您需要决定如何处理名称冲突的文件。这是我们用于为Camel应用程序构建可执行JAR的配置,包括Spring和所有必需的依赖项。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.5</version>
    <configuration>
        <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>org.apache.camel.spring.Main</mainClass>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.handlers</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.schemas</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.tooling</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/cxf/bus-extensions.txt</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
            <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                <resource>META-INF/INDEX.LIST</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                <resource>META-INF/MSFTSIG.SF</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                <resource>META-INF/MSFTSIG.RSA</resource>
            </transformer>
        </transformers>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

答案 1 :(得分:0)

您可以使用maven-jar-plugin

<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.poc.sms.MainApp</mainClass>
        </manifest>
    </archive>
</configuration>
</plugin>