本来项目是用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> |