سؤال

أريد إنشاء إجراء لأتمتة مجموعة GCJ. حيث لم أستطع أن نجعلها تعمل مع النملة, قررت تجربة SBT. يقول المستندات كيفية إنشاء إجراء وكيفية تشغيل عملية خارجية. ما لا أرى حتى الآن هو كيفية إعادة استخدام اجتياز شجرة الدليل الموجود لأعمال جافا ومجموعة التحويل البرمجي. في هذه الحالة، ستكون ملفات الإدخال الخاصة بي كل ملفات .class ضمن مجلد جذر معين. أحتاج أيضا إلى تحديد Classpath معين ل GCJ. أي مؤشرات لهذا سيكون موضع تقدير أيضا.

هل كانت مفيدة؟

المحلول

لم أستخدم GCJ كثيرا على الإطلاق وما زلت جديدا جدا في SBT، لكن هذه هي الطريقة التي أعتقد أنك يمكن أن تكتب مهمة سريعة للقيام بالضبط ما تبحث عنه مع SBT 0.7.1. يمكنك استخدام باثفايندر للاستيلاء على جميع ملفات الفصل مثل ذلك:

val allClasses = (outputPath ##) ** "*.class"

باستخدام طريقة المستوى الأعلى "PathFinder و" CompileclassPath "أعلى، يمكنك إنشاء مهمة مثل هذا والتي ستشغيل GCJ باستخدام Classpath المشروع الحالي وتأكل جميع ملفات .class في GCJFile واحد:

val gcj = "/usr/local/bin/gcj"
val gcjFile = "target/my_executable.o"

val allClasses = (outputPath ##) ** "*.class"

lazy val gcjCompile = execTask {
  <x>{gcj} --classpath={compileClasspath.get.map(_.absolutePath).mkString(":")}  -c {allClasses.get.map(_.absolutePath).mkString("-c ")} -o {gcjFile}</x>
} dependsOn(compile) describedAs("Create a GCJ executable object")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top