你們注意一下,因爲在寫入MANIFEST的時候,Class-Path路徑給的是 ../lib
,即上級目錄的lib。 因此在對拍時若是手動移動了 jar包的位置,須要保證 lib/ 文件夾在存放jar包的上一級目錄下,不然在運行時會報錯 ClassNotFound
java
(也能夠在源碼中直接修改jar包的輸出位置)git
一種可能的文件樹以下:github
├──src │ ├─ Archer.jar │ ├─ Berserker.jar │ ├─ Caster.jar | ├─ .... | └─ Alterego.jar ├──lib │ ├─ elevator-input-hw3-1.4-jar-with-dependencies.jar │ └─ timable-output-1.1-raw-jar-with-dependencies.jar └──your_pat.py
一鍵build:zip -> jar
因爲每次互測都要通過重複的操做:shell
download -> unzip -> compile -> runbash
本着一懶到底的原則,以及想要進一步熟悉一下shell指令,寫了一個builder的腳本。測試
本身留着沒意思,就拿出來分享給你們了,慢慢享用。ui
同時要感謝一下 fmh,過程當中幫我解決了許多問題,還有 lqq 以身試法幫我測試~spa
2.
中,更改相應的lib文件的絕對路徑├──src │ ├─ Archer.zip │ ├─ Berserker.zip │ ├─ Caster.zip | ├─ .... | └─ Alterego.zip ├──lib │ ├─ elevator-input-hw3-1.4-jar-with-dependencies.jar │ └─ timable-output-1.1-raw-jar-with-dependencies.jar └──builder.sh
builder.sh
而後就能夠愉快地開始對拍啦code
注意若是有player上交的src文件有多個main入口,有可能會出錯。(但一樣的,若是上交文件包含有多個入口,官方評測可能也過不了,這也是爲何rules中規定只能有一個入口)orm
easy
player/out/
lib
中的 -classpath 爲絕對路徑MANIFEST.mf
的寫入
elevator3.Main
grep
檢索.java
文件,獲得Main類包路徑,再對獲得的路徑進行標準格式化操做便可。.
表示當前路徑;..
表示上一目錄的路徑#!/bin/bash # Pre-Condition: # NOTHING # Attention: # *.zip will be deleted # Procedure: # 1. put all *.zip into the src/ folder # 2. put the external .jar into lib/ folder # 3. run './builder.sh' # 4. the jar-files has been generated in the 'out' folder of the corresponding directory, enjoy! # file-tree is as follows: # dir # ├──src # ├──lib # └──builder.sh cd src/ # 1. unzip and copy lib/ to src/ echo unzip start... ls *.zip > temp.txt sed 's/.zip//g' temp.txt > names.txt # sed 's/src/dst/' names=`cat names.txt` # attention # echo $names for name in ${names[@]} do mkdir $name unzip $name.zip -d $name cp -a ../lib $name done rm *.txt rm *.zip echo unzip successfully... # 2. compile to class echo complie start... prefix="javac -encoding utf-8 -d out/ @srcpath.txt " lib="-classpath /C/Users/94831/Desktop/CourseCenter/OO/testShell/lib/elevator-input-hw3-1.4-jar-with-dependencies.jar:/C/Users/94831/Desktop/CourseCenter/OO/testShell/lib/timable-output-1.1-raw-jar-with-dependencies.jar " command=${prefix}${lib} dirs=`ls` echo $dirs for dir in ${dirs[@]} do # echo $dir cd $dir mkdir out find -name "*.java" > srcpath.txt $command # rm srcpath.txt cd .. done echo compile successfully... # 3. pack to jar echo packing to jar... for dir in ${dirs[@]} do echo $dir cd $dir # write config information to MANIFEST.mf echo -n 'Main-Class: ' > MANIFEST.mf grep -l "public static void main" . -r | sed s/\\.\\///g | sed s/src\\///g | sed s/\\.java//g | sed s/\\//./g >> MANIFEST.mf sed '2, $d' MANIFEST.mf | tee MANIFEST.mf echo 'Class-Path: ../lib/elevator-input-hw3-1.4-jar-with-dependencies.jar ../lib/timable-output-1.1-raw-jar-with-dependencies.jar' >> MANIFEST.mf echo >> MANIFEST.mf mv MANIFEST.mf out cd out find -name "*.class" > classpath.txt jar cvfm $dir.jar MANIFEST.mf @classpath.txt cd .. # from out cd .. # from player_dir done echo pack successfully...