هل يمكن لأي شخص إعطاء مثال جيد على استخدام org.apache.maven.cli.mavencli برمجيًا؟

StackOverflow https://stackoverflow.com/questions/4206679

  •  25-09-2019
  •  | 
  •  

سؤال

أحاول إنشاء مكون إضافي Intellij يحتاج إلى تنفيذ أهداف Maven في المشروع الحالي. يوصي كل الحديث في الأنابيب باستخدام mavenembedder. حظا جيدا في ذلك. الإصدار 2.0.4 ليس مدعومًا جيدًا ولا توجد مراجع لكيفية استخدامه.

أعطيتها دوامة وركضت في جدار حيث لم يتم تهيئة التضمين مع جميع الحقول التي يحتاجها. حقن الأعضاء الخاص العاكس؟ مدهش! لماذا يحتاج أي شخص إلى طريقة واضحة لتهيئة كائن؟

يبدو أن عدد قليل من الناس يستخدمون إصدار 2.1 مع بعض النجاح. لم أتمكن من العثور على ذلك في جرة أو حتى مصادر.

ذهبت وفحصت الإصدار 3.0 من مشروع تضمين: http://maven.apache.org/ref/3.0-beta-3/maven-embedder/ إنه يبتعد عن كائن mavenembedder معًا ويبدو أنه يدعم الوصول فقط من خلال الأساليب الرئيسية أو المجال على Mavencli. هل استخدم أي شخص هذه الأساليب ويمكنه تقديم بعض النصائح؟

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

المحلول

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

MavenCli cli = new MavenCli();
int result = cli.doMain(new String[]{"compile"},
        "/home/aioffe/workspace/MiscMaven",
        System.out, System.out);
System.out.println("result: " + result);

يأخذ dir ويدير مرحلة "التجميع" ...

نصائح أخرى

عمل تكوين Maven ل maven 3.1.1

التبعيات

<dependencies>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-wagon</artifactId>
        <version>0.9.0.M2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.5</version>
    </dependency>
</dependencies>

شفرة

MavenCli cli = new MavenCli();

cli.doMain(new String[]{"clean", "compile"}, "project_dir", System.out, System.out);

يمكن أن تكون معلومات مصفوفة التبعية للنطاقات المقدمة والمكونات المكتسبة ديناميكيًا مربكة بعض الشيء. لقد كان الأمر بالنسبة لي ، لأنه يبدو لي أنني حصلت على جميع العناصر المطلوبة عن طريق التبعية المباشرة أو المتعدية ، ولكن بعد ذلك لم ينجح الدقة البعيدة.

أردت القفز إلى Maven 3.3.3 (الأحدث اعتبارًا من 2015-05-25). لقد جعلتها تعمل بدون أخطاء SISU التي قدمتها عندما حاولت التحديث بشكل متفائل إلى الإصدارات الحالية من الأشياء المحددة هنا (وفي أي مكان آخر). هذا مشروع له علامة عملت مع المثال المحدد اعتبارًا من اليوم باستخدام JDK8.

https://github.com/mykelalvis/test-maven-embedder/tree/20150525-working

DEPS ذات الصلة (SLF4J هو فقط حتى أتمكن من رؤية السجلات)

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-basic</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-transport-wagon</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-provider-api</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.9</version>
    </dependency>   

تشغيل هذا:

rm -r ~/.m2/repository/org/apache/maven/plugins/maven-clean-plugin/
mvn exec:java

ربما كان ينبغي أن يكون اختبار وحدة من نوع ما.

إذا كان لدى شخص ما حلًا متفوقًا لـ Maven 3.3.3 المدمج (أي توصل إلى مجموعة أصغر أو أكثر موجهًا من التبعيات المطلوبة) ، يرجى نشرها.

للبناء على التعليق من StevePerkins ، واستخدام Maven الإصدار 3.1.0 ،

اضطررت إلى استبعاد التبعية المتعدية من Aether-Connector-Wagon إلى Wagon-Provider-API لجعلها تعمل.

pom.xml:

(...)
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-embedder</artifactId>
    <version>3.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.aether</groupId>
    <artifactId>aether-connector-wagon</artifactId>
    <version>0.9.0.M2</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-provider-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.maven.wagon</groupId>
    <artifactId>wagon-http</artifactId>
    <version>2.5</version>
    <scope>test</scope>
</dependency>
(...)

وهنا مثال جافا:

(...)
MavenCli cli = new MavenCli();

ByteArrayOutputStream baosOut = new ByteArrayOutputStream();
ByteArrayOutputStream baosErr = new ByteArrayOutputStream();

PrintStream out = new PrintStream(baosOut, true);
PrintStream err = new PrintStream(baosErr, true);

cli.doMain( new String[] { "clean" }, new File("."), out, err );

String stdout = baosOut.toString("UTF-8");
String stderr = baosErr.toString("UTF-8");
(...)

مثال كامل هنا

هناك مصفوفة تبعية لكل إصدار من Maven-Embedder ، على سبيل المثال لمدة 3.2.5: http://maven.apache.org/ref/3.2.5/maven-embedder/dependencies.html

بناءً على ذلك كان علي استخدامه org.apache.maven:maven-embedder:jar:3.2.5, org.apache.maven:maven-aether-provider:jar:3.2.5, ، و org.apache.maven.wagon:wagon-provider-api:jar:2.8.

كما أنه يعمل على إصلاح التبعية على مكتبة الجوافة القديمة جدًا ، حيث يستخدم هذا الإصدار 18.0.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top