المؤلف: مايكل كارنيم
الصفحة الرئيسية للمشروع: http://github.com/mkarneim/pojobuilder
يعد PojoBuilder Generator معالجًا للتعليقات التوضيحية متوافقًا مع Java 6 ويقوم بإنشاء فئة منشئ بطلاقة لـ POJOs (كائن Java القديم العادي).
يوفر المنشئ الذي تم إنشاؤه
فيما يلي مثال لكيفية استخدام أداة إنشاء pojo التي تم إنشاؤها من التعليمات البرمجية الخاصة بك:
Contact james = new ContactBuilder ()
. withSurname ( "Bond" )
. withFirstname ( "James" )
. withEmail ( "[email protected]" )
. build ();
تعد أدوات الإنشاء مفيدة جدًا، على سبيل المثال، لإنشاء بيانات اختبار، حيث تريد فقط تعيين خصائص البيانات ذات الصلة.
لمزيد من المعلومات حول
الكود المصدري الموجود في الدليل "src" موجود في المجال العام. لمزيد من المعلومات يرجى قراءة ملف النسخ.
PojoBuilder هو منشئ أكواد برمجية خالصة. لا يضيف أي تبعيات وقت التشغيل لمشروعك.
ومع ذلك، يضيف PojoBuilder تبعية وقت الترجمة التالية إلى مشروعك، والذي له ترخيصه الخاص:
PojoBuilder مفتوح المصدر. كود المصدر متاح على http://github.com/mkarneim/pojobuilder. بالنسبة للإصدارات الأقدم وسجل التغيير، يرجى الاطلاع على صفحة سجل الإصدار.
ثنائيات PojoBuilder متاحة للتنزيل في Sonatype OSS Maven Repository وMaven Central.
إذا كنت لا تستخدم أي أداة لأتمتة البناء تدعم عمليات إعادة الشراء المخضرمة، فقد ترغب في تنزيل pojobuilder-4.3.0-jar-with-dependencies.jar
للحصول على PojoBuilder كاملاً مع تضمين جميع المكتبات التابعة.
يستخدم منشئ PojoBuilder معالج التعليقات التوضيحية لإنشاء منشئي pojo لك. لديك الخيارات التالية لتشغيل إنشاء التعليمات البرمجية:
لإنشاء فئة منشئ لـ pojo، يمكنك إضافة تعليق توضيحي إلى أحد منشئيها باستخدام @GeneratePojoBuilder
.
دعونا نلقي نظرة على المثال التالي بوجو:
public class Contact {
private final String surname ;
private final String firstname ;
private String email ;
@ GeneratePojoBuilder
public Contact ( String surname , String firstname ) {
this . surname = surname ;
this . firstname = firstname ;
}
public String getEmail () {
return email ;
}
public void setEmail ( String email ) {
this . email = email ;
}
public String getSurname () {
return surname ;
}
public String getFirstname () {
return firstname ;
}
}
يخبر التعليق التوضيحي @GeneratePojoBuilder معالج التعليقات التوضيحية بإنشاء ملف مصدر Java جديد بالاسم ContactBuilder
. قم بإلقاء نظرة على ContactBuilder.java
لرؤية كود المصدر الذي تم إنشاؤه.
يرجى ملاحظة أن المنشئ يجب أن يكون عامًا أو يمكن الوصول إليه بطريقة أخرى للمنشئ الذي تم إنشاؤه، على سبيل المثال، إذا كان محميًا، فيجب أن يكون المنشئ الذي تم إنشاؤه موجودًا في نفس الحزمة.
ولاحظ أيضًا أن أسماء معلمات المُنشئ يجب أن تتطابق تمامًا مع أسماء خصائص pojo.
يمكن استخدام تعليق توضيحي @ConstructorProperties اختياري لتحديد التعيين من أسماء معلمات المُنشئ إلى أسماء خصائص الفول المقابلة في pojo إذا كانت مختلفة.
public class Contact {
private final String surname ;
private final String firstname ;
private String email ;
@ GeneratePojoBuilder
@ ConstructorProperties ({ "surname" , "firstname" })
public Contact ( String arg1 , String arg2 ) {
this . surname = arg1 ;
this . firstname = arg2 ;
}
public String getEmail () {
return email ;
}
public void setEmail ( String email ) {
this . email = email ;
}
public String getSurname () {
return surname ;
}
public String getFirstname () {
return firstname ;
}
}
إذا لم يكن لدى pojo مُنشئ (أو مُنشئ افتراضي عام)، فيمكنك إضافة تعليق توضيحي لفئته باستخدام @GeneratePojoBuilder
.
دعونا نلقي نظرة على المثال التالي بوجو:
@ GeneratePojoBuilder
public class User {
private String name ;
private char [] password ;
public String getName () {
return name ;
}
public void setName ( String name ) {
this . name = name ;
}
public char [] getPassword () {
return password ;
}
public void setPassword ( char [] password ) {
this . password = password ;
}
}
قم بإلقاء نظرة على UserBuilder.java
لرؤية كود المصدر الذي تم إنشاؤه.
بدلًا من ذلك، إذا لم يكن لديك إمكانية الوصول إلى الكود المصدري لـ pojo، أو إذا لم تكن من محبي التعليق التوضيحي على pojo، فيمكنك إضافة تعليقات توضيحية إلى طريقة المصنع:
public class UrlFactory {
@ GeneratePojoBuilder ( withName = "UrlBuilder" , intoPackage = "samples" )
public static URL createUrl (
String protocol , String host , int port , String file , URLStreamHandler handler )
throws MalformedURLException {
return new URL ( protocol , host , port , file , handler );
}
}
قم بإلقاء نظرة على UrlBuilder.java
لرؤية كود المصدر الذي تم إنشاؤه.
يرجى ملاحظة أن طريقة المصنع يجب أن تكون عامة وثابتة . يجب أن تتطابق أسماء معلمات الطريقة مع أسماء خصائص pojo تمامًا.
يمكن استخدام تعليق توضيحي @FactoryProperties اختياري لتحديد التعيين من أسماء معلمات طريقة المصنع إلى أسماء خصائص الفول المقابلة في pojo إذا كانت مختلفة.
public class FileFactory {
@ GeneratePojoBuilder ( intoPackage = "samples" )
@ FactoryProperties ({ "path" })
public static File createFile ( String arg1 ) {
return new File ( arg1 );
}
}
قم بإلقاء نظرة على FileBuilder.java
لرؤية كود المصدر الذي تم إنشاؤه.
بدءًا من PojoBuilder 4.3، يمكنك إضافة تعليق توضيحي إلى نوع سجل Java 17:
@ GeneratePojoBuilder
public record MyRecord ( int x , int y , String blah ) {}
يمكن استخدام العناصر التالية من @GeneratePojoBuilder لتكوين مخرجات عملية إنشاء التعليمات البرمجية.
Fluent*Builder
ستصبح FluentContactBuilder
إذا كان اسم pojo هو Contact
. النمط الافتراضي هو *Builder
.Visibility.PUBLIC
.*.util
ستصبح com.example.util
إذا كانت حزمة pojo هي com.example
. النمط الافتراضي هو *
.Object.class
.Address.java
و Builder.java
و AddressBuilder.java
. الافتراضي هو Void.class
، مما يعني أنه لا ينبغي تنفيذ أي واجهة.Recipient.java
و Builder.java
و RecipientBuilder.java
. الافتراضي false
.InputSourceFactory.java
و InputSourceBuilder.java
. الافتراضي هو *
.CalendarFactory.java
و GregorianCalendarBuilder.java
. الافتراضي هو المصفوفة الفارغة.Player.java
و PlayerBuilder.java
و AbstractPlayerBuilder.java
. الافتراضي false
.TextEmail.java
و TextEmailBuilder.java
. الافتراضي false
.com.google.common.base.Optional
و java.util.Optional
المقدمان مع Java 8 من Google Guava. الإعداد الافتراضي هو Void.class
، مما يعني أنه لا يتم إنشاء طرق ضبط قائمة على أساس اختياري.with*
.validate
التي تحتوي على معلمة واحدة متوافقة مع نوع pojo. إذا فشل التحقق من الصحة، فيجب أن تطرح الطريقة بعض استثناءات وقت التشغيل (أو إحدى فئاتها الفرعية). للحصول على مثال، يرجى الاطلاع على Credentials.java
و CredentialsValidator.java
و CredentialsBuilder.java
.Task.java
و TaskBuilder.java
. الافتراضي هو ""
مما يعني عدم إنشاء هذه الطريقة.بدءًا من الإصدار 3، يدعم PojoBuilder التعليقات التوضيحية الوصفية . أي أنه يمكنك وضع @GeneratePojoBuilder على تعليق توضيحي آخر وسيتم توريثه.
المزايا هي:
يحدد المثال التالي @AppPojo
والذي يمكن تطبيقه على مستوى الفصل الدراسي ويتضمن التعليقات التوضيحية من ثلاثة مصادر مختلفة (PojoBuilder وLombok وJSR-305).
@ GeneratePojoBuilder ( withName = "Fluent*Builder" )
@ lombok . experimental . Value // class-level annotation from Lombok
@ javax . annotation . concurrent . Immutable // class-level annotation from JSR-305
@ Target ({ ElementType . TYPE , ElementType . ANNOTATION_TYPE })
public @interface AppPojo {
}
يمكن وضع هذا على كل من pojos الخاص بك:
@ AppPojo
public class Contact {
public String name ;
}
سيقوم PojoBuilder بإنشاء FluentContactBuilder
بناءً على التوجيهات الموروثة من التعليق التوضيحي @AppPojo
.
يمكن تجاوز الإعدادات الافتراضية الموروثة من التعليقات التوضيحية عن طريق المزيد من التعليقات التوضيحية "المحلية" @GeneratePojoBuilder
:
@ AppPojo
@ GeneratePojoBuilder ( intoPackage = "builder" )
public class Contact {
public String name ;
}
سيؤدي هذا إلى إنشاء FluentContactBuilder
كما كان من قبل ولكن في builder
الحزم.
يوفر موقع PojoBuilder wiki كتاب طهي حول استخدام PojoBuilder Generator، على سبيل المثال لبناء لغة خاصة بالمجال للاختبارات الآلية.
للحصول على بعض أمثلة التعليمات البرمجية الكاملة، يرجى إلقاء نظرة على المجلد src/testdata/Java/samples.
لتنفيذ معالج التعليقات التوضيحية PojoBuilder، ما عليك سوى وضعه في مسار فئة وقت الترجمة. أثناء وقت التشغيل، لا توجد مكتبات مطلوبة نظرًا لأن سياسة الاحتفاظ بالتعليقات التوضيحية لـ PojoBuilder هي CLASS
.
فيما يلي قائمة بأوصاف مختصرة حول كيفية تشغيل PojoBuilder باستخدام
سوف يقوم برنامج التحويل البرمجي javac
بالكشف التلقائي عن وجود PojoBuilder إذا تم تضمين pojobuilder-*.jar
في مسار الفصل.
على سبيل المثال:
javac -cp pojobuilder-4.3.0-jar-with-dependencies.jar Contact.java
سيتم إنشاء ContactBuilder
إذا تم وضع تعليق توضيحي على Contact
باستخدام @GeneratePojoBuilder
.
لمزيد من المعلومات، راجع وثائق javac.
أضف ما يلي إلى pom.xml
الخاص بمشروعك لتكوين معالج التعليقات التوضيحية PojoBuilder.
net.karneim
pojobuilder
4.3.0
provided
ملحوظات:
${project.build.directory}/generated-sources/annotations
.target
، فقم بتكوين generatedSourcesDirectory
الخاص بالملحق maven-compiler-plugin
. راجع نموذج Maven pom للحصول على مثال.هذا برنامج نصي صغير للإنشاء يوضح كيفية تشغيل معالج التعليقات التوضيحية PojoBuilder باستخدام Gradle.
apply plugin : ' java '
repositories {
mavenCentral()
}
dependencies {
compile ' net.karneim:pojobuilder:4.3.0 '
}
يرجى ملاحظة أن هذا لا يضيف فقط PojoBuilder وتبعياته إلى مسار فئة وقت الترجمة الخاص بك ولكن أيضًا إلى مسار فئة وقت التشغيل الخاص بك.
بدلاً من ذلك، يمكنك استخدام البرنامج النصي التالي لإضافة PojoBuilder فقط إلى مسار فئة وقت الترجمة:
apply plugin : ' java '
repositories {
mavenCentral()
}
configurations {
codeGeneration
}
dependencies {
codeGeneration ' net.karneim:pojobuilder:4.3.0 '
compileOnly ' net.karneim:pojobuilder:4.3.0:annotations '
}
compileJava . classpath + = configurations . codeGeneration
compileTestJava . classpath + = configurations . codeGeneration
في كلتا الحالتين، سيتم وضع المصادر التي تم إنشاؤها في دليل build/classes
القياسي.
إذا كنت تريد وضعها في مكان آخر، فما عليك سوى تحديد الوجهة مثل هذا:
compileJava . options . compilerArgs + = [ ' -s ' , ' src/generated/java ' ]
يحتوي موقع wiki على برنامج نصي Gradle ممتد يميز بشكل كامل بين مهام إنشاء التعليمات البرمجية وتجميعها.
يوجد برنامج نصي Gradle آخر يمكّن PojoBuilder لـ Eclipse IDE.
مع Gradle 5.0، لن يتم تنفيذ أي معالج للتعليقات التوضيحية في مسار الفصل بعد الآن. لجعل pojobuilder يعمل مرة أخرى، استبدل نطاق التبعية المستخدم بـ annotationProcessor
dependencies {
annotationProcessor ' net.karneim:pojobuilder:4.3.0 '
}
فيما يلي مقتطف من التعليمات البرمجية لبعض نماذج البرامج النصية لبناء ANT التي تقوم بتشغيل معالج التعليقات التوضيحية PojoBuilder ضمن مهمة javac
.
< fileset id = " libs.fileset " dir = " ${basedir}/lib " >
< include name = " *.jar " />
fileset >
< path id = " class.path " >
< fileset refid = " libs.fileset " />
path >
< target name = " compile " depends = " init "
description = " Compile java sources and run annotation processor " >
< mkdir dir = " ${src.gen.java.dir} " />
< mkdir dir = " ${build.classes.dir} " />
< javac classpathref = " class.path " destdir = " ${build.classes.dir} " >
< src path = " ${src.main.java.dir} " />
< compilerarg line = " -s ${src.gen.java.dir} " />
javac >
target >
يمكنك أيضًا تكوين Eclipse لتشغيل معالج التعليقات التوضيحية PojoBuilder أثناء دورة الإنشاء. سيتم استدعاؤه عندما تقوم بحفظ الملفات التي تحتوي على مصادر تم التعليق عليها بـ @GeneratePojoBuilder
.
قم بما يلي لتمكين PojoBuilder لمشروع Eclipse الخاص بك:
pojobuilder-4.3.0-annotations.jar
إلى مسار فئة مشروعكpojobuiler-4.3.0-jar-with-dependencies.jar
إذا كنت تريد تجميع مصادر هذا المشروع بنفسك، فيمكنك استخدام Gradle (راجع build.gradle).