java - كيفية إضافة ملفات جرة محلية لمشروع Maven؟




libraries mvn-repo (20)

<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>

كيف أقوم بإضافة ملفات jar محلية (ليست جزءًا من مستودع Maven بعد) مباشرة في مصادر مكتبة مشروعي؟



هذه الإجابة هي فقط لمستخدمي ECLIPSE:

إذا كنت تستخدم Eclipse ، ضع الجرة في lib / ، ثم انقر بزر الماوس الأيمن على اسم jar وانقر على "add to build path". سينشئ Eclipse "مكتبات مرجعية" ويضع الجرة من أجلك

انها حلت استيراد الجرة على الفور في البرنامج بالنسبة لي


أريد مثل هذا الحل - استخدم maven-install-plugin في ملف pom:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.5.2</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <file>lib/yourJar.jar</file>
                        <groupId>com.somegroup.id</groupId>
                        <artifactId>artefact-id</artifactId>
                        <version>x.y.z</version>
                        <packaging>jar</packaging>
                    </configuration>
                </execution>
            </executions>
        </plugin>

في هذه الحالة ، يمكنك إجراء mvn initialize وسيتم تثبيت jar في repo maven المحلي. الآن هذه الجرة متوفرة خلال أي خطوة مخضر على هذا الجهاز (لا تنسى أن تدرج هذه التبعية مثل أي تبعية أخرى مخبأة في pom مع علامة <dependency></dependency> ). من الممكن أيضًا ربط تثبيت jar بعدم initialize الخطوة ، ولكن أي خطوة أخرى تريدها.



الطريقة المفضلة هي إنشاء المستودع الخاص بك عن بعد.

انظر here للحصول على تفاصيل حول كيفية القيام بذلك. ألقِ نظرة على قسم " التحميل إلى مستودع عن بُعد ".


أريد مشاركة رمز يمكنك من خلاله تحميل مجلد مليء بالجرار. يفيد ذلك عندما لا يكون لدى مقدم الخدمة مستودع عام وتحتاج إلى إضافة الكثير من المكتبات يدويًا. لقد قررت إنشاء .bat بدلاً من الاتصال مباشرةً إلى maven لأنه قد يكون خارج ذاكرة الأخطاء. تم إعداده لبيئة نظام النوافذ ولكن من السهل تهيئته لنظام التشغيل Linux:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

public class CreateMavenRepoApp {

    private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";

    public static void main(String[] args) throws IOException {

    File directory = new File();
    //get all the files from a directory
    PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
    writer.println("rem "+ new Date());  
    File[] fList = directory.listFiles();
    for (File file : fList){
        if (file.isFile()){               
        String absolutePath = file.getAbsolutePath() ;
        Manifest  m = new JarFile(absolutePath).getManifest();
        Attributes attributes = m.getMainAttributes();
        String symbolicName = attributes.getValue("Bundle-SymbolicName");

        if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
            String[] parts =symbolicName.split("\\.");
            String artifactId = parts[parts.length-1];
            String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
            String version = attributes.getValue("Bundle-Version");
            String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
            writer.println(mavenLine);          
        }

        }
    }
    writer.close();
    }

}

بعد تشغيل هذا الرئيسي من أي بيئة تطوير متكاملة ، قم بتشغيل update_repo_maven.bat.


إحدى الطرق هي تحميله إلى مدير مستودع Maven الخاص بك (مثل Nexus). من الجيد أن يكون لديك مدير مستودع خاص بك على أي حال.

طريقة أخرى لطيفة رأيتها مؤخراً هي تضمين برنامج Maven Install Plugin في دورة حياة البناء الخاصة بك: أنت تعلن في POM لتثبيت الملفات في المستودع المحلي. أنها صغيرة ولكن صغيرة دون أي خطوة يدوية.

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html


قم بتثبيت JAR في مستودع Maven المحلي على النحو التالي:

mvn install:install-file
   -Dfile=<path-to-file>
   -DgroupId=<group-id>
   -DartifactId=<artifact-id>
   -Dversion=<version>
   -Dpackaging=<packaging>
   -DgeneratePom=true

Where: <path-to-file>  the path to the file to load
   <group-id>      the group that the file should be registered under
   <artifact-id>   the artifact name for the file
   <version>       the version of the file
   <packaging>     the packaging of the file e.g. jar

Reference


كان لي نفس الخطأ لمجموعة من التبعيات في بلدي pom.xml تبين لم يتم تحديد إصدارات من التبعيات في pom.xml وتم ذكره في مستودع الأم. لسبب ما لم يتم مزامنة تفاصيل الإصدار مع هذا الريبو. ومن ثم أدخلت النسخ يدويا باستخدام العلامة وعملت مثل السحر. تحتاج إلى القليل من الوقت للبحث عن الإصدارات في الأصل وتحديد هنا. ولكن هذا يمكن القيام به فقط للجرار التي تظهر الخطأ قطعة فنية ويعمل. أمل أن هذا يساعد شخصاما.


أضف JAR المحلي الخاص بك في ملف POM واستخدم ذلك في بناء maven.

mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar

فمثلا:

mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar

ثم إضافته إلى POM مثل هذا:


هذا هو بناء جملة قصيرة للإصدارات الأحدث:

mvn install:install-file -Dfile=<path-to-file>

وهو يعمل عندما تم بناء JAR بواسطة Apache Maven - الحالة الأكثر شيوعًا. ثم ستحتوي على pom.xml في مجلد فرعي من دليل META-INF ، والذي سيتم قراءته افتراضيًا.

المصدر: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html


لتثبيت جرة جهة خارجية ، يرجى الاتصال بالأمر كما هو موضح أدناه

mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path

أولاً أود أن أقدم الفضل لهذه الإجابة لمستخدم المجهول - أنا متأكد من أنني رأيت إجابة مماثلة من قبل - لكن الآن لا يمكنني العثور عليها.

أفضل خيار لوجود ملفات جرة محلية كاعتمادية هو إنشاء مستودع maven محلي. مثل هذا الريبو هو شيء آخر غير هيكل الدليل الصحيح مع ملفات بوم فيه.

على سبيل المثال الخاص بي: لدي مشروع رئيسي على ${master_project} الموقع و subroject1 على ${master_project}/${subproject1}

ثم أقوم بإنشاء مستودع mvn في: ${master_project}/local-maven-repo

في ملف pom في المشروع ${master_project}/${subproject1}/pom.xml يجب تحديد مستودع ${master_project}/${subproject1}/pom.xml والذي من شأنه أن يأخذ مسار الملف كمعلمة url:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.parent.basedir}/local-maven-repo</url>
    </repository>
</repositories>

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

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.servicebinder</artifactId>
        <version>0.9.0-SNAPSHOT</version>
    </dependency>

آخر ما يجب فعله هو إضافة ملف jar إلى المستودع المحلي باستخدام مفتاح التبديل DolocalRepositoryPath مثل هنا:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
    -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
    -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
    -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
    -DlocalRepositoryPath=${master_project}/local-maven-repo

يتم تثبيت ملف جرة Onece مثل mvn repo يمكن أن يلتزم مستودع الكود وإعداده بالكامل هو نظام مستقل. ( مثال عملي في جيثب )

أوافق على أن وجود JARs ملتزمة برمز مصدر رمز ليست ممارسة جيدة ولكن في الحياة الحقيقية حل سريع وقذر في بعض الأحيان أفضل من repo نيكو الكامل لاستضافة جرة واحدة لا يمكنك نشرها.


على المستودع المحلي الخاص بك يمكنك تثبيت جرة الخاص بك عن طريق إصدار الأوامر

 mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

اتبع هذا link المفيد لفعل الشيء نفسه من موقع mkyoung. يمكنك أيضا التحقق من دليل maven لنفسه


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

هذا هو الرابط: http://roufid.com/3-ways-to-add-local-jar-to-maven-project/

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

install:install-file -Dfile=C:\driversDB\ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar

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

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


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

الطريقة الوحيدة التي تمكنت من جعلها تعمل عن طريق وضع الجرة على /src/main/webapp/WEB-INF/lib/ ثم دمجها مع حل Fattahis أو Roman.


سطر الأوامر :

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar

يوجد بناء جملة التبعيات في وثائق مواصفات متطلبات إصدار التبعية . هنا هو للاكتمال:

تعريف عنصر version التبعيات متطلبات الإصدار ، وتستخدم لحساب إصدار التبعية الفعالة. متطلبات الإصدار لها الصيغة التالية:

  • 1.0 : متطلبات "Soft" على 1.0 (مجرد توصية ، إذا كان يطابق كافة النطاقات الأخرى للتبعية)
  • [1.0] : متطلبات "صلبة" على 1.0
  • (,1.0] : x <= 1.0
  • [1.2,1.3] : 1.2 <= x <= 1.3
  • [1.0,2.0) : 1.0 <= x <2.0
  • [1.5,) : x> = 1.5
  • (,1.0],[1.2,) : x <= 1.0 أو x> = 1.2؛ مجموعات متعددة مفصولة بفواصل
  • (,1.1),(1.1,) : هذا يستثني 1.1 (على سبيل المثال إذا كان معروفًا أنه لا يعمل مع هذه المكتبة)

في حالتك ، يمكنك فعل شيء مثل <version>[1.2.3,)</version>





java maven libraries mvn-repo