maven打包一个包含依赖jar包的可执行jar

遇到的问题:

mvn jar:jar

在使用maven打包的jar文件,再运行时,总出现classnotfound的错误。


首先是参照:

http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven

800多的高票答案。

<plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <mainClass>edu.wit.fcl.gsontools.GsonFormat</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
    </plugin

mvn clean compile assembly:single

失败,gson还是没有打包进去


再是参照:

http://m.oschina.net/blog/127531

http://panyongzheng.iteye.com/blog/1955763

    <plugin>    
        <groupId>org.apache.maven.plugins</groupId>    
        <artifactId>maven-jar-plugin</artifactId>    
        <configuration>    
            <archive>    
                <manifest>    
                    <addClasspath>true</addClasspath>    
                    <classpathPrefix>lib/</classpathPrefix>    
                    <mainClass>edu.wit.fcl.gsontools.GsonFormat</mainClass>    
                </manifest>    
            </archive>    
        </configuration>    
    </plugin>

mvn clean package
失败,gson还是没有打包进去


最后用maven生成ant,在自己修改build.xml才达到目地

先mvn ant:ant

再修改build.xml为

<?xml version="1.0" encoding="UTF-8"?>

<!-- ====================================================================== -->
<!-- Ant build file (http://ant.apache.org/) for Ant 1.6.2 or above.        -->
<!-- ====================================================================== -->

<project name="gsontools" default="create_run_jar" basedir=".">

  <!-- ====================================================================== -->
  <!-- Import maven-build.xml into the current project                        -->
  <!-- ====================================================================== -->

  <import file="maven-build.xml"/>
  
  <!-- ====================================================================== -->
  <!-- Help target                                                            -->
  <!-- ====================================================================== -->

  <target name="help">
    <echo message="Please run: $ant -projecthelp"/>
  </target>

  <target name="create_run_jar">
    <jar destfile="${maven.build.dir}/${maven.build.finalName}.jar"
	   filesetmanifest="mergewithoutmain">
            <manifest>
                <attribute name="Main-Class" value="edu.wit.fcl.gsontools.GsonFormat"/>
                <attribute name="Class-Path" value="."/>
            </manifest>
            <fileset dir="${maven.build.outputDir}"/>
            <zipfileset excludes="META-INF/*.SF" src="${maven.repo.local}/com/google/code/gson/gson/2.3/gson-2.3.jar"/>
        </jar>
  </target>

</project>

才达到目地。

因为时间有限,暂时这样解决了,应该是有更好方法,等待探究。

这个方式,存在手动改文件,比如 zipfileset 后面一段,需要复制

如果依赖太多,完全不可行。


你可能感兴趣的:(maven,jar)