นี่คือคำสั่ง ajc ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
ajc — คอมไพเลอร์และ bytecode weaver สำหรับภาษา AspectJ และ Java
เรื่องย่อ
AJC [ Options] [ไฟล์... - -ไฟล์... - -argfile ไฟล์... ]
รายละเอียด
รางวัล AJC คำสั่งคอมไพล์และสานไฟล์ซอร์ส AspectJ และ Java และไฟล์ .class การผลิต
ไฟล์ .class ที่เข้ากันได้กับ Java VM (1.1 หรือใหม่กว่า) มันรวมการรวบรวมและ
bytecode ทอและรองรับบิลด์ที่เพิ่มขึ้น; คุณยังสามารถสาน bytecode ที่รันไทม์
การใช้ "" >.
อาร์กิวเมนต์หลังจากตัวเลือกระบุไฟล์ต้นฉบับที่จะคอมไพล์ เพื่อระบุแหล่งที่มา
คลาส ใช้ -inpath (ด้านล่าง). ไฟล์อาจแสดงรายการโดยตรงบนบรรทัดคำสั่งหรือใน a
ไฟล์. -argfile ไฟล์ และ @ไฟล์ รูปแบบเทียบเท่าและตีความว่าเป็นความหมาย
อาร์กิวเมนต์ทั้งหมดที่ระบุไว้ในไฟล์ที่ระบุ
หมายเหตุ คุณต้องผ่านอย่างชัดเจน AJC แหล่งข้อมูลที่จำเป็นทั้งหมด อย่าลืมใส่แหล่งที่มา
ไม่เพียงแต่สำหรับลักษณะหรือ pointcuts แต่สำหรับประเภทที่ได้รับผลกระทบด้วย ระบุทั้งหมด
source มีความจำเป็นเพราะไม่เหมือนกับ javac, ajc จะไม่ค้นหา sourcepath สำหรับ
ชั้นเรียน (สำหรับการอภิปรายเกี่ยวกับประเภทที่ได้รับผลกระทบ ให้ดูที่ รางวัล มุมมองJ
การเขียนโปรแกรม คู่มือ การดำเนินงาน ภาคผนวก ../progguide/implementation.html) .
ในการระบุแหล่งที่มา คุณสามารถแสดงรายการไฟล์ต้นฉบับเป็นอาร์กิวเมนต์หรือใช้ตัวเลือก -ต้นทาง
or -inpath. หากมีหลายแหล่งที่มาสำหรับประเภทใด ๆ ผลลัพธ์จะไม่ถูกกำหนดตั้งแต่ ajc
ไม่มีทางตัดสินได้ว่าแหล่งใดถูกต้อง (สิ่งนี้เกิดขึ้นบ่อยที่สุดเมื่อผู้ใช้
รวมไดเร็กทอรีปลายทางใน inpath และสร้างใหม่)
Options
-อินจาร์ JarList
เลิกใช้แล้ว: ตั้งแต่ 1.2 ใช้ -inpath ซึ่งรับไดเรกทอรีด้วย
-inpath เส้นทาง
ยอมรับซอร์ส bytecode ใด ๆ ไฟล์ .class ในผลลัพธ์จะรวมไฟล์เหล่านี้
ชั้นเรียน อาจจะเป็นการทอด้วยลักษณะที่เกี่ยวข้องใดๆ เส้นทางเดียว
อาร์กิวเมนต์ที่มีรายการพาธไปยังไฟล์ zip หรือไดเร็กทอรี คั่นด้วย
ตัวคั่นพาธเฉพาะแพลตฟอร์ม
-Aspectpath เส้นทาง
สานลักษณะไบนารีจากไฟล์ jar และไดเร็กทอรีบนพาธไปยังแหล่งที่มาทั้งหมด
ลักษณะที่ควรได้รับการส่งออกโดยคอมไพเลอร์รุ่นเดียวกัน เมื่อไหร่
การรันคลาสเอาต์พุต run classpath ควรมี widthpath . ทั้งหมด
รายการ. เส้นทาง เช่นเดียวกับ classpath เป็นอาร์กิวเมนต์เดียวที่มีรายการของเส้นทาง
ไปยังไฟล์ jar คั่นด้วยตัวคั่น classpath เฉพาะแพลตฟอร์ม
-argfile เนื้อไม่มีมัน
ไฟล์มีรายการอาร์กิวเมนต์ที่คั่นด้วยบรรทัด แต่ละบรรทัดในไฟล์
ควรมีหนึ่งตัวเลือก ชื่อไฟล์ หรือสตริงอาร์กิวเมนต์ (เช่น classpath หรือ
อินพาท) อาร์กิวเมนต์ที่อ่านจากไฟล์จะถูกแทรกลงในรายการอาร์กิวเมนต์สำหรับ
คำสั่ง เส้นทางสัมพัทธ์ในไฟล์คำนวณจากไดเร็กทอรี
มีไฟล์ (ไม่ใช่ไดเร็กทอรีการทำงานปัจจุบัน) ความคิดเห็นเช่นเดียวกับใน Java
เริ่มกับ // และขยายไปจนสุดปลายสาย ตัวเลือกที่ระบุในอาร์กิวเมนต์
ไฟล์อาจแทนที่แทนที่จะขยายค่าตัวเลือกที่มีอยู่ ดังนั้นให้หลีกเลี่ยง
ระบุตัวเลือกเช่น -คลาสพาธ ในไฟล์อาร์กิวเมนต์ซึ่งแตกต่างจาก
ไฟล์อาร์กิวเมนต์เป็นข้อกำหนดเฉพาะบิลด์เท่านั้น แบบฟอร์ม @ไฟล์ เป็นเช่นเดียวกับ
ระบุ -argfile ไฟล์.
-นอกจา เอาท์พุท.โถ
ใส่คลาสเอาต์พุตในไฟล์ zip output.jar
-outxml สร้างไฟล์ aop.xml สำหรับการทอผ้าเวลาโหลดด้วยชื่อเริ่มต้น
-outxmlfile กำหนดเอง/aop.xml
สร้างไฟล์ aop.xml สำหรับการทอผ้าเวลาโหลดด้วยชื่อที่กำหนดเอง
- เพิ่มขึ้น
รันคอมไพเลอร์อย่างต่อเนื่อง หลังจากการคอมไพล์เริ่มต้น คอมไพเลอร์จะ
รอคอมไพล์ใหม่จนกว่าจะอ่านบรรทัดใหม่จากอินพุตมาตรฐานและ will
ออกเมื่ออ่าน 'q' มันจะคอมไพล์ส่วนประกอบที่จำเป็นใหม่เท่านั้น ดังนั้น a
คอมไพล์ใหม่ควรจะเร็วกว่าการคอมไพล์ที่สองมาก สิ่งนี้ต้องการ
- รากต้นทาง
-ต้นทาง DirPaths
ค้นหาและสร้างไฟล์ต้นฉบับ .java หรือ .aj ทั้งหมดภายใต้ไดเร็กทอรีใด ๆ ที่ระบุไว้ใน
ไดร์พาธส์. DirPaths เช่น classpath เป็นอาร์กิวเมนต์เดียวที่มีรายการของ
พาธไปยังไดเร็กทอรี คั่นด้วยตัวคั่นคลาสพาธเฉพาะแพลตฟอร์ม
ต้องการโดย -incremental
-crossrefs
สร้างไฟล์ build .ajsym ลงในไดเร็กทอรีเอาต์พุต ใช้สำหรับดู
การอ้างอิงไขว้โดยเครื่องมือต่างๆ เช่น AspectJ Browser
-emacssym สร้างไฟล์สัญลักษณ์ .ajesym สำหรับการสนับสนุน emacs (เลิกใช้แล้ว)
-Xlint เหมือนกับ -Xlint:warning (เปิดใช้งานโดยค่าเริ่มต้น)
-Xlint:{ระดับ}
ตั้งค่าระดับเริ่มต้นสำหรับข้อความเกี่ยวกับข้อผิดพลาดในการเขียนโปรแกรมที่อาจเกิดขึ้นใน
รหัสตัดขวาง {level} อาจถูกละเว้น คำเตือน หรือข้อผิดพลาด สิ่งนี้แทนที่
รายการใน org/aspectj/weaver/XlintDefault.properties จาก widthjtools.jar แต่
ไม่แทนที่ระดับที่กำหนดโดยใช้ตัวเลือก -Xlintfile
-Xlintfile คุณสมบัติไฟล์
ระบุไฟล์คุณสมบัติเพื่อกำหนดระดับสำหรับข้อความตัดขวางเฉพาะ
PropertyFile เป็นพาธไปยังไฟล์ Java .properties ที่ใช้คุณสมบัติเดียวกัน
ชื่อและค่าเป็น org/aspectj/weaver/XlintDefault.properties from
widthjtools.jar ซึ่งแทนที่ด้วย
-help ปล่อยข้อมูลเกี่ยวกับตัวเลือกคอมไพเลอร์และการใช้งาน
-version ปล่อยเวอร์ชันของคอมไพเลอร์ AspectJ
-คลาสพาธ เส้นทาง
ระบุตำแหน่งที่จะค้นหาไฟล์คลาสผู้ใช้ เส้นทางเป็นอาร์กิวเมนต์เดียวที่มี a
รายการพาธไปยังไฟล์ zip หรือไดเร็กทอรี คั่นด้วยเฉพาะแพลตฟอร์ม
ตัวคั่นเส้นทาง
-bootclasspath เส้นทาง
แทนที่ตำแหน่งของ bootclasspath ของ VM เพื่อวัตถุประสงค์ในการประเมินประเภทเมื่อ
การรวบรวม เส้นทางเป็นอาร์กิวเมนต์เดียวที่มีรายการพาธไปยังไฟล์ zip หรือ
ไดเร็กทอรี คั่นด้วยตัวคั่นพาธเฉพาะแพลตฟอร์ม
-extdirs เส้นทาง
แทนที่ตำแหน่งของไดเร็กทอรีส่วนขยายของ VM เพื่อวัตถุประสงค์ในการประเมินประเภท
เมื่อรวบรวม เส้นทางเป็นอาร์กิวเมนต์เดียวที่มีรายการเส้นทางไปยัง
ไดเร็กทอรี คั่นด้วยตัวคั่นพาธเฉพาะแพลตฟอร์ม
-d ค้นหาสถานที่
ระบุตำแหน่งที่จะวางไฟล์ .class ที่สร้างขึ้น หากไม่ระบุ ค้นหาสถานที่
ค่าเริ่มต้นเป็น dir ทำงานปัจจุบัน
- เป้าหมาย [1.1 ไปยัง 1.5]
ระบุการตั้งค่าเป้าหมาย classfile (1.1 ถึง 1.5 ค่าเริ่มต้นคือ 1.2)
-1.3 ตั้งค่าระดับความสอดคล้องเป็น 1.3 ซึ่งหมายถึง -source 1.3 และ -target 1.1
-1.4 ตั้งค่าระดับความสอดคล้องเป็น 1.4 (ค่าเริ่มต้น) ซึ่งหมายถึง -source 1.4 และ -target 1.2
-1.5 ตั้งค่าระดับความสอดคล้องเป็น 1.5 นี่หมายถึง -source 1.5 และ -target 1.5
ที่มา- [1.3|1.4|1.5]
การยืนยันแบบสลับ (1.3, 1.4 หรือ 1.5 - ค่าเริ่มต้นคือ 1.4) เมื่อใช้ -source 1.3
คำสั่ง assert() ที่ถูกต้องภายใต้ Java 1.4 จะส่งผลให้เกิดข้อผิดพลาดของคอมไพเลอร์
เมื่อใช้ -source 1.4 ให้รักษา ยืนยัน เป็นคีย์เวิร์ดและดำเนินการยืนยัน
ตามข้อกำหนดภาษา 1.4 เมื่อใช้ -source 1.5, Java 5 ภาษา
คุณสมบัติได้รับอนุญาต
-nowarn ไม่มีคำเตือน (เทียบเท่า '-warn:none') ซึ่งจะไม่ระงับข้อความ
ที่สร้างขึ้นโดย ประกาศ คำเตือน or เอ็กซ์ลินท์.
-เตือน: รายการ
ส่งคำเตือนสำหรับรายการที่น่าสงสัยของรายการโค้ดที่น่าสงสัยที่คั่นด้วยเครื่องหมายจุลภาค
(เช่น '-warn:unusedLocals, deprecation'):
เมธอด constructorName พร้อมชื่อคอนสตรัคเตอร์
packageDefaultMethod พยายามแทนที่วิธีการเริ่มต้นของแพ็คเกจ
การเลิกใช้ประเภทหรือสมาชิกที่เลิกใช้แล้ว
maskedCatchBlocks บล็อก catch ที่ซ่อนอยู่
unusedLocals ตัวแปรท้องถิ่นไม่เคยอ่าน
อาร์กิวเมนต์เมธอด unusedArguments ไม่เคยอ่าน
unusedImports คำสั่งนำเข้าไม่ได้ใช้โดยรหัสในไฟล์
ไม่มีการระงับคำเตือนคอมไพเลอร์ทั้งหมด
-warn:ไม่มี ไม่ระงับข้อความที่สร้างโดย ประกาศ คำเตือน or เอ็กซ์ลินท์.
-การเลิกใช้
เช่นเดียวกับ -warn:deprecation
-noImportError
ไม่มีข้อผิดพลาดสำหรับการนำเข้าที่ยังไม่ได้แก้ไข
-ดำเนินการต่อไปข้อผิดพลาด
คอมไพล์ต่อไปหลังจากเกิดข้อผิดพลาด ดัมพ์ไฟล์คลาสด้วยวิธีการที่มีปัญหา
-g:[lines,vars,แหล่งที่มา]
ระดับแอตทริบิวต์การดีบักซึ่งอาจมีสามรูปแบบ:
-g ข้อมูลการดีบักทั้งหมด ('-g:lines,vars,source')
-g:none ไม่มีข้อมูลการดีบัก
-g:{items} ข้อมูลการดีบักสำหรับ [lines, vars, source] ใดๆ/ทั้งหมด เช่น
-g:บรรทัดแหล่งที่มา
- รักษา AllLocals
คงไว้ซึ่งตัวแปรท้องถิ่นทั้งหมดระหว่างการสร้างโค้ด (เพื่ออำนวยความสะดวกในการดีบัก)
-ข้อมูลอ้างอิง
ข้อมูลอ้างอิงการคำนวณ
-การเข้ารหัส รูป
ระบุรูปแบบการเข้ารหัสต้นทางเริ่มต้น ระบุการเข้ารหัสแบบกำหนดเองต่อไฟล์
พื้นฐานโดยการต่อท้ายชื่อไฟล์/โฟลเดอร์ต้นทางอินพุตแต่ละไฟล์ด้วย '[การเข้ารหัส]'
-verbose ส่งข้อความเกี่ยวกับหน่วยการรวบรวมที่เข้าถึง/ประมวลผล
-showWeaveInfo
ส่งข้อความเกี่ยวกับการทอผ้า
- เข้าสู่ระบบ ไฟล์ ระบุล็อกไฟล์สำหรับข้อความคอมไพเลอร์
-progress แสดงความคืบหน้า (ต้องใช้โหมดบันทึก)
-time แสดงข้อมูลความเร็ว
-noExit อย่าเรียก System.exit(n) เมื่อสิ้นสุดการรวบรวม (n=0 หากไม่มีข้อผิดพลาด)
-ทำซ้ำ N ทำซ้ำขั้นตอนการรวบรวม N ครั้ง (โดยทั่วไปจะทำการวิเคราะห์ประสิทธิภาพ)
-XterminateAfterCompilation
ทำให้คอมไพเลอร์หยุดทำงานก่อนทอ
-XaddSerialVersionUID
ทำให้คอมไพเลอร์คำนวณและเพิ่มฟิลด์ SerialVersionUID ให้กับประเภทใดก็ได้
การใช้ Serializable ที่ได้รับผลกระทบจากด้านหนึ่ง สนามคือ
คำนวณจากชั้นเรียนก่อนการทอผ้าจะเกิดขึ้น
-Xreweavable[:บีบอัด]
(ทดลอง - เลิกใช้แล้วตามค่าเริ่มต้น) เรียกใช้ผู้ประกอบในโหมดที่ทำซ้ำได้ซึ่ง
ทำให้เกิดชั้นการทอที่สามารถทอขึ้นใหม่ได้ขึ้นอยู่กับ
ข้อห้ามในการพยายามทอผ้าใหม่ทุกประเภทที่แนะนำการทอ
ประเภทจะต้องสามารถเข้าถึงได้
-Xnoอินไลน์
(ทดลอง) ไม่อินไลน์รอบคำแนะนำ
-XincreationalFile ไฟล์
(ทดลอง) ใช้งานได้เหมือนโหมดที่เพิ่มขึ้น แต่ใช้ไฟล์แทน
อินพุตมาตรฐานเพื่อควบคุมคอมไพเลอร์ มันจะคอมไพล์ใหม่ทุกครั้งที่ไฟล์ is
เปลี่ยนและหยุดเมื่อไฟล์ถูกลบ
-XserializableAspects
(ทดลอง) โดยปกติมันเป็นข้อผิดพลาดในการประกาศด้าน Serializable นี้
ตัวเลือกลบข้อ จำกัด นั้น
-Xnotนำกลับมาใช้ใหม่ได้
(ทดลอง) สร้างไฟล์คลาสที่ AspectJ ไม่สามารถสร้างใหม่ได้ในภายหลัง
-Xajruntimelevel:1.2, ระดับเวลา ajrun:1.5
(ทดลอง) อนุญาตให้สร้างโค้ดที่กำหนดเป้าหมายเป็น 1.2 หรือ 1.5 ระดับ
รันไทม์ AspectJ (ค่าเริ่มต้น 1.5)
เนื้อไม่มีมัน ชื่อ
ajc ยอมรับไฟล์ต้นฉบับด้วย .ชวา ส่วนขยายหรือ .อาจ ส่วนขยาย. เรา
ปกติใช้ .ชวา สำหรับไฟล์ทั้งหมดของเราในระบบ AspectJ -- ไฟล์ที่มีด้านต่างๆ
เช่นเดียวกับไฟล์ที่มีคลาส อย่างไรก็ตาม หากคุณจำเป็นต้องใช้เครื่องจักร
แยกแยะไฟล์ที่ใช้ฟังก์ชันเพิ่มเติมของ AspectJ กับไฟล์ที่บริสุทธิ์
Java เราแนะนำให้ใช้ the .อาจ นามสกุลของไฟล์เหล่านั้น
เราต้องการกีดกันวิธีอื่น ๆ ของความแตกต่างทางกลเช่นอนุสัญญาการตั้งชื่อ
หรือแพ็คเกจย่อยเพื่อสนับสนุน .อาจ การขยาย.
· ข้อตกลงเรื่องชื่อไฟล์นั้นยากต่อการบังคับใช้และนำไปสู่ชื่อที่น่าอึดอัดสำหรับแง่มุมของคุณ
แทน TracingAspect.java เราแนะนำให้ใช้ Tracing.aj (หรือเพียงแค่ Tracing.java)
แทน.
· แพ็คเกจย่อยย้ายแง่มุมต่าง ๆ ออกจากที่ปกติในระบบและสามารถสร้าง
ความต้องการเทียมในด้านสิทธิพิเศษ แทนที่จะเพิ่มแพ็คเกจย่อยเช่น
ด้าน เราแนะนำให้ใช้ .อาจ นามสกุลและรวมถึงไฟล์เหล่านี้ใน your
แพ็คเกจที่มีอยู่แทน
ความเข้ากันได้
AspectJ เป็นส่วนขยายที่เข้ากันได้กับภาษาการเขียนโปรแกรม Java คอมไพเลอร์ AspectJ
ยึดมั่นใน รางวัล ชวา ภาษา ข้อมูลจำเพาะ ที่สอง ฉบับที่ (หนังสือ)
http://java.sun.com/docs/books/jls/index.html และไปที่ รางวัล ชวา เสมือน เครื่อง
สเปค ที่สอง ฉบับที่ (หนังสือ) http://java.sun.com/docs/books/vmspec/index.html และ
ทำงานบนแพลตฟอร์มที่เข้ากันได้กับ Java 2 รหัสที่สร้างทำงานบน Java 1.1 หรือ
แพลตฟอร์มที่เข้ากันได้ในภายหลัง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความเข้ากันได้กับ Java และกับ
AspectJ รุ่นก่อนหน้า ดู "" >.
ตัวอย่าง
A ง่าย ตัวอย่าง
รวบรวมสองไฟล์:
ajc HelloWorld.java Trace.java
An ตัวอย่าง การใช้ -argfile/@
เพื่อหลีกเลี่ยงการระบุชื่อไฟล์บนบรรทัดคำสั่ง ให้แสดงรายการไฟล์ต้นฉบับใน line-delimited
ข้อความ argfile.jpg เส้นทางของไฟล์ต้นทางอาจเป็นแบบสัมบูรณ์หรือสัมพันธ์กับ argfile และอาจจะ
รวม argfiles อื่น ๆ โดย @-reference ไฟล์ต่อไปนี้ source.lst มี
ไฟล์แบบสัมบูรณ์และแบบสัมพันธ์และ @-references:
Gui.java
/home/user/src/Library.java
ข้อมูล/Repository.java
ข้อมูล/Access.java
@../../common/common.lst
@/home/user/src/lib.lst
ดู/body/ArrayView.java
รวบรวมไฟล์โดยใช้รูปแบบ -argfile หรือ @:
ajc -argfile source.lst
ajc @sources.lst
Argfiles ยังรองรับโดย jikes และ javac ดังนั้นคุณจึงสามารถใช้ไฟล์ในไฮบริดบิลด์ได้
อย่างไรก็ตาม การสนับสนุนจะแตกต่างกันไป:
· เฉพาะ ajc เท่านั้นที่ยอมรับตัวเลือกบรรทัดคำสั่ง
· Jikes และ Javac ไม่ยอมรับการอ้างอิง @argfile ภายใน
· Jikes และ Javac ยอมรับเฉพาะแบบฟอร์ม @file บนบรรทัดคำสั่ง
An ตัวอย่าง การใช้ -inpath และ -Aspectpath
การทอโค้ดไบต์โดยใช้ -inpath: AspectJ 1.2 รองรับการทอไฟล์ .class ในอินพุต zip/jar
ไฟล์และไดเร็กทอรี การใช้ jars อินพุตก็เหมือนกับการคอมไพล์ซอร์สไฟล์ที่เกี่ยวข้อง
และไบนารีทั้งหมดจะถูกส่งไปยังเอาต์พุต แม้ว่าคอมไพเลอร์ที่เข้ากันได้กับ Java อาจแตกต่างกันใน
เอาต์พุต ajc ควรใช้เป็นอินพุตไฟล์คลาสใด ๆ ที่สร้างโดย javac, jikes, eclipse
และแน่นอน ajc ด้านที่รวมอยู่ใน -inpath จะถูกถักทอเหมือน .class . อื่นๆ
ไฟล์ต่างๆ และจะมีผลกับไฟล์ประเภทอื่นๆ ตามปกติ
ไลบรารี Aspect โดยใช้ -aspectpath: AspectJ 1.1 รองรับการทอจากไลบรารีแบบอ่านอย่างเดียว
ที่มีแง่มุมต่างๆ เช่นเดียวกับโถอินพุต สิ่งเหล่านี้ส่งผลต่ออินพุตทั้งหมด ไม่เหมือนโถใส่ พวกเขา
ตัวเองจะไม่ได้รับผลกระทบหรือปล่อยออกมาเป็นผลผลิต แหล่งที่มาที่รวบรวมด้วยไลบรารีด้าน
ต้องรันด้วยไลบรารีด้านเดียวกันบน classpath
ตัวอย่างต่อไปนี้สร้างตัวอย่างการติดตามในสภาพแวดล้อมบรรทัดรับคำสั่ง มันสร้าง
ไลบรารีด้านแบบอ่านอย่างเดียว รวบรวมบางคลาสเพื่อใช้เป็นอินพุต bytecode และคอมไพล์
คลาสและแหล่งข้อมูลอื่นๆ ด้วยไลบรารีด้าน
ตัวอย่างการติดตามอยู่ในการกระจาย AspectJ ({aspectj}/doc/examples/tracing) นี้
ใช้ไฟล์ต่อไปนี้:
ด้านj1.1/
ถังขยะ/
AJC
lib /
มุมมองjrt.jar
ตัวอย่าง /
ติดตาม /
Circle.java
ตัวอย่าง Main.java
lib /
AbstractTrace.java
TraceMyClasses.java
notrace.lst
Square.java
Traclib.lst
Tracev3.lst
TwoDShape.java
รุ่น3/
Trace.java
TraceMyClasses.java
ด้านล่าง ตัวคั่นพาธจะถูกใช้เป็น ";" แต่ตัวคั่นไฟล์คือ "/" คำสั่งทั้งหมดคือ
ในบรรทัดเดียว ปรับพาธและคำสั่งในสภาพแวดล้อมของคุณตามต้องการ
ตั้งค่าพาธ classpath และไดเร็กทอรีปัจจุบัน:
ตัวอย่างซีดี
ส่งออก ajrt=../lib/aspectjrt.jar
ส่งออก CLASSPATH="$ajrt"
เส้นทางการส่งออก="../ bin:$เส้นทาง"
สร้างไลบรารีการติดตามแบบอ่านอย่างเดียว:
ajc -argfile การติดตาม/tracelib.lst -outjar tracelib.jar
สร้างแอปพลิเคชันด้วยการติดตามในขั้นตอนเดียว:
ajc -aspectpath tracelib.jar -argfile การติดตาม/notrace.lst -outjar tracedapp.jar
เรียกใช้แอปพลิเคชันด้วยการติดตาม:
java -classpath "$ajrt;tracedapp.jar;tracelib.jar" การติดตาม ตัวอย่างหลัก
สร้างแอปพลิเคชันด้วยการติดตามจากไบนารีในสองขั้นตอน:
· (a) สร้างคลาสแอปพลิเคชัน (ใช้ javac เพื่อการสาธิต):
mkdir คลาส
javac -d การติดตามคลาส/*.java
jar cfM app.jar -C คลาส
· (b) สร้างแอปพลิเคชันด้วยการติดตาม:
ajc -inpath app.jar -aspectpath tracelib.jar -outjar ที่ติดตามแอป.jar
เรียกใช้แอปพลิเคชันด้วยการติดตาม (เหมือนด้านบน):
java -classpath "$ajrt;tracedapp.jar;tracelib.jar" การติดตาม ตัวอย่างหลัก
เรียกใช้แอปพลิเคชันโดยไม่ติดตาม:
java -classpath "app.jar" tracing.ExampleMain
รางวัล มุมมองJ ผู้รวบรวม API
คอมไพเลอร์ AspectJ ถูกนำไปใช้อย่างสมบูรณ์ใน Java และสามารถเรียกได้ว่าเป็นคลาส Java
อินเทอร์เฟซเดียวที่ควรถือเป็นสาธารณะคือวิธีการสาธารณะใน
org.aspectj.tools.ajc.Main. เช่น, หลัก(สตริง[] อาร์กิวเมนต์) ใช้มาตรฐาน AJC คำสั่ง
อาร์กิวเมนต์บรรทัด ซึ่งหมายความว่าวิธีอื่นในการรันคอมไพเลอร์คือ
ชวา org.aspectj.tools.ajc.Main [ตัวเลือก...] [ไฟล์...]
ในการเข้าถึงข้อความคอมไพเลอร์โดยทางโปรแกรม ให้ใช้เมธอด setHolder(IMessageHolder
ที่ยึด) และ / หรือ วิ่ง(สตริง[] อาร์กิวเมนต์ IMessageผู้ถือ ที่ยึด). AJC รายงานแต่ละข้อความไปยัง
ผู้ถือใช้ IMessageHolder.handleMessage(..). หากคุณต้องการรวบรวมข้อความ
ใช้ ตัวจัดการข้อความ เป็นของคุณ IMessageผู้ถือ. ตัวอย่างเช่น คอมไพล์และรัน the
ตามด้วย Aspectjtools.jar บนเส้นทางของชั้นเรียน:
นำเข้า org.aspectj.bridge.*;
นำเข้า org.aspectj.tools.ajc.Main;
นำเข้า java.util.Arrays;
WrapAjc คลาสสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
คอมไพเลอร์หลัก = ใหม่ Main();
MessageHandler m = MessageHandler ใหม่ ();
compiler.run (args, ม.);
IMessage[] ms = m.getMessages(null, จริง);
System.out.println("messages: " + อาร์เรย์.asList(นางสาว));
}
}
กอง ร่องรอย และ ไฟล์ต้นฉบับ คุณลักษณะ
ไม่เหมือนกับคอมไพเลอร์จาวาทั่วไป คอมไพเลอร์ AspectJ อาจสร้างในบางกรณี
classfiles จากไฟล์ต้นฉบับหลายไฟล์ น่าเสียดายที่รูปแบบไฟล์คลาส Java ดั้งเดิม
ไม่สนับสนุนแอตทริบิวต์ SourceFile หลายรายการ เพื่อให้แน่ใจว่าไฟล์ต้นฉบับทั้งหมด
มีข้อมูล คอมไพเลอร์ AspectJ อาจเข้ารหัสหลายชื่อไฟล์ในบางกรณี
ในแอตทริบิวต์ SourceFile เมื่อ Java VM สร้างสแต็กเทรซ จะใช้สิ่งนี้
แอตทริบิวต์เพื่อระบุไฟล์ต้นทาง
(คอมไพเลอร์ AspectJ 1.0 ยังรองรับนามสกุลไฟล์ .class ของ JSR-45 อีกด้วย
อนุญาตให้ดีบักเกอร์ที่เข้ากันได้ (เช่น jdb ใน Java 1.4.1) เพื่อระบุไฟล์และบรรทัดที่ถูกต้อง
แม้กระทั่งให้ไฟล์ต้นฉบับจำนวนมากสำหรับคลาสเดียว มีการวางแผนรองรับ JSR-45 สำหรับ ajc in
AspectJ 1.1 แต่ไม่ได้อยู่ในรีลีสเริ่มต้น ในการรับไฟล์ .class ที่แก้จุดบกพร่องได้อย่างสมบูรณ์ ให้ใช้
ตัวเลือก -XnoInline)
อาจมีครั้งเดียวที่คุณจะเห็นรูปแบบนี้คือเมื่อคุณดูสแต็กเทรซ ซึ่งคุณ
อาจพบร่องรอยของรูปแบบ
java.lang.NullPointerException
ที่ Main.new$constructor_call37(Main.java;SynchAspect.java[1k]:1030)
ที่ไหนแทนปกติ
ไฟล์:LineNumber
รูปแบบที่คุณเห็น
File0;File1[Number1];File2[Number2] ... :LineNumber
ในกรณีนี้ LineNumber คือออฟเซ็ตปกติในบรรทัดบวกกับ "บรรทัดเริ่มต้น" ของจริง
ไฟล์ต้นทาง นั่นหมายความว่าคุณใช้ LineNumber เพื่อระบุไฟล์ต้นทางและเพื่อค้นหา
บรรทัดที่เป็นปัญหา ตัวเลขใน [วงเล็บ] หลังจากแต่ละไฟล์บอกคุณว่า "start ." เสมือน
บรรทัด" สำหรับไฟล์นั้น (ไฟล์แรกมีจุดเริ่มต้นเป็น 0)
ในตัวอย่างของเราจากการติดตามข้อยกเว้นตัวชี้ null บรรทัดเริ่มต้นเสมือนคือ 1030
เนื่องจากไฟล์ SynchAspect.java "เริ่มต้น" ที่บรรทัด 1000 [1k] LineNumber ชี้ไปที่บรรทัด
30 ของ SynchAspect.java
ดังนั้น เมื่อต้องเผชิญกับสแต็กเทรซดังกล่าว วิธีค้นหาตำแหน่งต้นทางที่แท้จริงคือto
ดูรายการหมายเลข "บรรทัดเริ่มต้น" เพื่อค้นหาหมายเลขที่อยู่ใต้บรรทัดที่แสดง
ตัวเลข. นั่นคือไฟล์ที่สามารถค้นหาตำแหน่งต้นทางได้จริง จากนั้นลบ
ว่า "บรรทัดเริ่มต้น" จากหมายเลขบรรทัดที่แสดงเพื่อค้นหาหมายเลขบรรทัดจริงภายในนั้น
ไฟล์
ในไฟล์คลาสที่มาจากไฟล์ต้นฉบับเพียงไฟล์เดียว คอมไพเลอร์ AspectJ จะสร้าง
แอตทริบิวต์ SourceFile ที่สอดคล้องกับคอมไพเลอร์ Java แบบดั้งเดิม
AJC(1)
ใช้ ajc ออนไลน์โดยใช้บริการ onworks.net