Ant打包Maven项目—-解压依赖Jar包

本来项目是用Maven管理依赖,用MavenShade打包的(其它打包打包完了无法运行)。领导要求改为Ant打包,本来Mave就是菜鸡,Ant都没用过的我简直啧啧。

找了各种插件,Maven Ant自动生成build,可以直接打包,但是我这边打包完了之后所有依赖都没打包,只打包了源码。gg

然后找到AntTask-官网说已废弃,但是新版本搜不到教程,也没有一个正儿八经的文档,所以还是用的老版的AntTask。跟着教程和手册读取了Maven的pom.xml,将所有依赖的jar包都导进来了,但是,无法运行,和MavenShade打包的文件对比,发现MavenShade打包的文件里,所有的jar都是解压出来的,而AntTask打包出来的依赖都是原封不动的Jar

这里提供一个AntTask打包,将依赖Jar解压进来,而不是复制进来的build.xml,这个xml是Maven Ant自动生成的基础上修改的,删去了路径,测试等和这篇文章主题无关的内容。

目录结构看起来没问题了,但是运行的时候还是会各种报错,解决了再更新。

好的,最后发现就是资源文件没复制进来,用拖进来就行了,那就是没问题。只不过ANT打包之后以前会在Shell输出的日志都没了,搞得我有点不适应

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//前几行是引入maven-ant-tasks jar包,并将pom.xml引入,读取其依赖,生成一个fileSet
  <path id="maven-ant-tasks.classpath" path="./lib/maven-ant-tasks-2.1.3.jar" />
  <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="antlib:org.apache.maven.artifact.ant" classpathref="maven-ant-tasks.classpath" />
  <artifact:pom id ="mypom" file ="pom.xml" />
  <artifact:dependencies filesetId ="mydepsfid" pathId="mydepspid" pomRefId ="mypom" />
 
  <target name="compile" description="Compile the code">
    <mkdir dir="${maven.build.outputDir}"/>
    <javac destdir="${maven.build.outputDir}"
           nowarn="false"
           debug="true"
           optimize="false"
           deprecation="true"
           target="1.8"
           verbose="false"
           fork="false"
           source="1.8"
           includeantruntime="false">
      <src>
        <pathelement location="${maven.build.srcDir.0}"/>
      </src>
      <classpath refid="mydepspid"/>
    </javac>
    //将Jar包解压--我的maven.build.outputDir目录是target/classes
    <unzip dest="${maven.build.outputDir}">
        <fileset refid ="mydepsfid" />
    </unzip>
  </target>

  <target name="package" depends="compile" description="Package the application">
    <jar jarfile="${maven.build.dir}/${maven.build.finalName}.jar"
         compress="true"
         index="false"
         basedir="${maven.build.outputDir}"
         excludes="**/package.html">
        <manifest>
            //指定Main-Class
            <attribute name="Main-Class" value="com.trs.xcrawler.server.XcrawlerServer"/>
        </manifest>
    </jar>
  </target>

  <target name="jar" depends="package" description="Builds the jar for the application"/>
</project>