البرنامج المساعد Maven لـ JPackage من Java 14

طاب مسائك!

منذ وقت ليس ببعيد ، تم إصدار Java 14. من بين العديد من الميزات المثيرة للاهتمام ، كنت مهتمًا بواحدة ، وهي أداة تعبئة العبوات (أثناء وجودها في الحاضنة).

معنى هذه الميزة هو أخذ تطبيقنا ، وكل التبعيات ووقت التشغيل ، وتجميع ملف تثبيت واحد ، يسهل توزيعه وتثبيته وتشغيله.

وصف كيفية استخدام الأداة في المقالة .

بعد اللعب مع المعبئ ، أردت أن أحاول تنفيذه في مشروع الحيوانات الأليفة الخاص بي.نظرًا لأنه تمت كتابة المشروع باستخدام Maven ، فقد تقرر كتابة مكون إضافي. نظرًا لأن هذه هي المرة الأولى التي أكتب فيها مكونًا إضافيًا لـ Maven ، فقد أصبحت هذه المهمة مثيرة للاهتمام بالنسبة لي بشكل مضاعف.

بعد googling حول موضوع الإضافات ، أصبح من الواضح أنه لم يكن من الصعب كتابتها: لقد ورثت من فئة AbstractMojo ، نفذت طريقة تنفيذ الفراغ () ، وعلقت تعليق Mojo ، وكان البرنامج المساعد جاهزًا.

والنتيجة هي مثل هذا الفراغ:

@Mojo(name = "createpackage", defaultPhase = LifecyclePhase.VERIFY, threadSafe =true)
public class JpackageMojo extends AbstractMojo {

   @Override
   public void execute() {
        //    .
   }
}

"Createpackage" هو اسم الهدف ؛ سيتم تنفيذ
"LifecyclePhase.VERIFY" عند التحقق.

لإنشاء المثبت. exe ، يجب تشغيل الأمر:

jpackage --name myapp --input lib --main-jar main.jar

أي ، تحتاج إلى تحديد اسم الملف في الإخراج ، المجلد مع التطبيق وتحديد dzharnik مع الطريقة الرئيسية. للحصول على هذه البيانات ، أضف الأسطر التالية إلى الفصل:

@Parameter(defaultValue = "${project.build.directory}")
private File buildDirectory;
@Parameter( defaultValue = "${project}", readonly = true )
private MavenProject project;

تقول الوثائق أن الأداة متاحة من خلال java.util.spi.ToolProvider.findFirst ("jpackage") ، لكنني لم أستطع استخدامها. ربما يرجع ذلك إلى حقيقة أن العبوة موجودة في الحاضنة. إذا كان شخص ما يعرف الحل ، فيرجى المشاركة في التعليقات.

حسنًا ، إذا لم تتمكن من القيام بذلك بشكل جميل ، فسنقوم بذلك بشكل قبيح ، من خلال Runtime.getRuntime (). Exec (الأمر). من أجل البساطة ، اقترحت إضافة jpackage.exe إلى متغيرات البيئة.

الأمر الناتج لتنفيذ:

jpackage.exe --name name --input path --main-jar main --dest dest --win-menu --win-shortcut

حيث الزوجان المزيد من الأعلام وأضاف : --dest دست يشير إلى مكان للنتيجة، --win-القائمة --win الاختصار يضيف الروابط لي ولسطح المكتب في ويندوز.

ونتيجة لذلك ، حصلت على ما يلي:

@Mojo(name = "createpackage", defaultPhase = LifecyclePhase.VERIFY, threadSafe = true)
public class JpackageMojo extends AbstractMojo {

   public static final String ERROR_CREATE_PACKAGE = "Error create package";

   @Parameter(defaultValue = "${project.build.directory}")
   private File buildDirectory;
   @Parameter( defaultValue = "${project}", readonly = true )
   private MavenProject project;

   @Override
   public void execute() {
       var name = project.getArtifactId();
       var path = buildDirectory.getPath();
       var main = project.getArtifact().getFile().getName();
       var dest = path + "\\dest";
       try {
           String command  = "jpackage.exe --name " + name + " --input "
                   + path + " --main-jar " + main + " --dest " + dest
                   + " --win-menu --win-shortcut";
           getLog().debug(command);
           Process proc = Runtime.getRuntime().exec(command);
           getLog().info(Arrays.toString(proc.getInputStream().readAllBytes()));
           proc.waitFor();
           proc.destroy();
       } catch (IOException e) {
           getLog().error(ERROR_CREATE_PACKAGE, e);
       } catch (InterruptedException e) {
           getLog().error(ERROR_CREATE_PACKAGE, e);
           Thread.currentThread().interrupt();
       }
   }
}

في المشروع ، يمكنك الاتصال بإضافة الأسطر التالية إلى pom.xml
<plugin>
   <groupId>org.sterzhen</groupId>
   <artifactId>jpackage-maven-plugin</artifactId>
   <version>1.0-SNAPSHOT</version>
   <executions>
       <execution>
           <goals>
               <goal>createpackage</goal>
           </goals>
       </execution>
   </executions>
</plugin>

عند اختبار البرنامج المساعد في مشروع الحيوانات الأليفة ، كانت هناك مفاجأة أخرى ، وهي أن يعمل الحزم في Windows ، فمن الضروري تثبيت WiX 3.0 أو أحدث.

بعد تثبيت WiX ، نجح المكون الإضافي ، مما جلب لي فرحة انتصار صغير. نعم ، في حين أنها بدائية وتعمل فقط مع Windows ، ولكن هذه ليست سوى البداية.

سأكون سعيدا لسماع التعليقات والاقتراحات.

يمكن العثور على رمز المصدر على الرابط.

التوثيق:

http://openjdk.java.net/jeps/343
https://docs.oracle.com/en/java/javase/14/docs/specs/man/jpackage.html
https://docs.oracle. كوم / ar / java / javase / 14 / jpackage / Packaging-Overview.htm

شكرًا لك!

All Articles