Maven ve sistem kapsamına JAR ekleme


86

Android projemde bir JAR var ve son APK'ye eklenmesini istiyorum. Tamam, işte gidiyorum:

    <dependency>
        <groupId>com.loopj.android.http</groupId>
        <artifactId>android-async-http</artifactId>
        <version>1.3.2</version>
        <type>jar</type>
        <scope>system</scope>
        <systemPath>${project.basedir}/libs/android-async-http-1.3.2.jar</systemPath>
    </dependency>

Ama koşarken mvn packagebir uyarı alıyorum:

[WARNING] Some problems were encountered while building the effective model for **apk:1.0
[WARNING] 'dependencies.dependency.systemPath' for com.loopj.android.http:android-async-http:jar should not point at files within the project directory, ${project.basedir}/libs/android-async-http-1.3.2.jar will be unresolvable by dependent projects @ line 36, column 25

Ve son APK'de JAR yok.

Bunu nasıl düzeltirim?


3
Sistem kapsamını bu şekilde kullanamazsınız. install: install-file kullanın.
bmargulies

@bmargulies Bu kapsamın ne için olduğunu söyleyebilir misiniz?
efpies

1
Gradle'a geçtim ve artık bu baş ağrılarım yok, şimdi maven ile açık kaynaklı bir kitaplık kullanmaya ve geçici olarak bir kavanozu kırmaya çalışıyorum (bu, gradle'da çok kolay ve maven'de çok zor).
Dean Hiller

1
Bu soru, Maven'de sistem kapsamını kullanmaktan nasıl kaçınılacağına dair tartışmayı içeriyor: stackoverflow.com/questions/3642023/…
Mark Butler

Kapsam 'sistemi' hakkında resmi belgeler: maven.apache.org/guides/introduction/…
Guillaume Husta

Yanıtlar:


24

Jar'ı yerel maven deponuza eklemeniz gerekecek . Alternatif olarak (daha iyi seçenek) uygun depoyu (varsa) belirtin, böylece maven tarafından otomatik olarak indirilebilir

Her iki durumda da <systemPath>etiketi bağımlılıktan kaldırın


4
Bu makaleyi gördüm ama maven installo projeyi inşa etmek istediğim her bilgisayarda yapmamayı umuyordum (maalesef bu JAR'ı depolarda bulamadım). Teşekkürler! :)
efpies

1
Yapının bir parçası olarak komut dosyası yazılabilir.
Thorbjørn Ravn Andersen

145

Gerçek nedenini bilmiyorum ama Maven geliştiricileri tüm kitaplıkları (özel) bazı maven depolarına yüklemeye zorluyor, bu yüzden scope:systempek sevilmiyor, Basit bir çözüm kullanmaktırmaven-install-plugin

kullanımı takip edin:

bağımlılığınızı bu şekilde yazın

<dependency>
    <groupId>com.mylib</groupId>
    <artifactId>mylib-core</artifactId>
    <version>0.0.1</version>
</dependency>

ardından maven-install-eklentisini ekleyin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>install-external</id>
            <phase>clean</phase>
            <configuration>
                <file>${basedir}/lib/mylib-core-0.0.1.jar</file>
                <repositoryLayout>default</repositoryLayout>
                <groupId>com.mylib</groupId>
                <artifactId>mylib-core</artifactId>
                <version>0.0.1</version>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
        </execution>
    </executions>
</plugin>

dikkat edin phase:clean, özel kitaplığınızı deponuza yüklemek için çalıştırmanız mvn cleanve ardındanmvn install


10
Neden <phase>process-resources</phase>yerine kullanmıyorsunuz <phase>clean</phase>? Süreç kaynakları aşaması böyle bir senaryo için daha uygun görünür ve her zaman derleme aşamasından önce çağrılır.
jplandrain

1
İlk kurulumda, 'yerleşik yaşam döngüsünde' süreç kaynaklarından önce gelen 'doğrulama' aşamasını geçebileceğinizden emin misiniz? ; ), 'temiz yaşam döngüsü' önce 'yerleşik yaşam
döngüsüdür

5
Çalışır, ancak birkaç bağımlılığı nasıl kurarsınız?
Renaud Pawlak

6
Stackoverflow, topluluğun OP'nin doğru cevap seçimini geçersiz kılmasına izin veren bir özellik eklemelidir, çünkü IMHO, Bu cevap kabul edilen cevap olmalıdır! :)
Vijay Chavda

2
Diğerlerinin de söylediği gibi, cleanfaza bağlanmak çok yanıltıcıdır, varsayılan yaşam döngüsünün bir parçası değildir ve anlamını bozar clean. Ayrıca, varsayılan yaşam döngüsünde bir aşamanın (örneğin validateveya process-resources) kullanılması için önerilen değişiklik, çok modüllü bir durumda başarısız olacaktır, çünkü alt modüller için herhangi bir özel hedef yürütülmeden önce toplayıcı tarafından bağımlılık çözümü denenmiştir .
wool.in.silver

14
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>

Bunu dene.


11

Sistem kapsamı yalnızca 'sistem' dosyalarıyla ilgilenmek için tasarlanmıştır; dosyalar sabit bir yerde duruyor. /usr/lib, Veya ${java.home}(ör. tools.jar) Dosyasında . .jarProjenizdeki çeşitli dosyaları desteklemek için tasarlanmamıştır .

Yazarlar kasıtlı olarak, sizi caydırmak için yol adı genişletmelerinin doğru çalışmasını sağlamayı reddettiler. Sonuç olarak, kısa vadede install:install-fileyerel depoya yüklemek için kullanabilir ve daha sonra bir gün paylaşmak için bir depo yöneticisi kullanabilirsiniz.


3

Bir depo yöneticisi kullanın ve bu tür kavanozları içine yükleyin. Bu, sorunlarınızı tamamen ve ağınızdaki tüm bilgisayarlar için çözer.


3
Yerel sunucuda bir depoyu yarın veya sonra çalıştırmayı planlamıştık ama ondan önce bu sorunu başka bir şekilde çözmeliyim.
efpies

1
@Efpies'in de belirttiği gibi, bir geliştiricinin repo yöneticisi oluşturma izni / yeteneği olmadığında, bu bir gökte pasta cevabı olabilir.
StephenBoesch

Bugünlerde, docker'ı kurduysanız ihtiyacınız olan tek şey docker run -d -p 8081:8081 --name nexus sonatype/nexus3- ayrıntılar için hub.docker.com/r/sonatype/nexus3 adresine bakın.
Thorbjørn Ravn Andersen

3

Bu yapılandırmayı deneyin. Benim için çalıştı:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <warSourceDirectory>mywebRoot</warSourceDirectory>
        <warSourceExcludes>source\**,build\**,dist\**,WEB-INF\lib\*,
            WEB-INF\classes\**,build.*
        </warSourceExcludes>
        <webXml>myproject/source/deploiement/web.xml</webXml>
        <webResources>
            <resource>
                <directory>mywebRoot/WEB-INF/lib</directory>
                <targetPath>WEB-INF/lib</targetPath>
                <includes>
                        <include>mySystemJar1.jar.jar</include>
                         <include>mySystemJar2.jar</include>
                   </includes>
            </resource>
        </webResources>
    </configuration>
</plugin>

0

mvn install: install-file -DgroupId = com.paic.maven -DartifactId = tplconfig-maven-plugin -Dversion = 1.0 -Dpackaging = jar -Dfile = tplconfig-maven-plugin-1.0.jar -DgeneratePom = true

Jar'ı yerel depoya yükleyin.


3
Bu, doğrudan ponpondan eklemekten daha zahmetlidir.
Pradeeban Kathiravelu

0

Ging3r sayesinde çözümüm var:

bu adımları takip et:

  1. bağımlılık etiketinde kullanmayın. Pom.xml dosyasında bağımlılıklar etiketinde aşağıdakileri kullanın ::

    <dependency>
    <groupId>com.netsuite.suitetalk.proxy.v2019_1</groupId>
    <artifactId>suitetalk-axis-proxy-v2019_1</artifactId>
    <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.netsuite.suitetalk.client.v2019_1</groupId>
        <artifactId>suitetalk-client-v2019_1</artifactId>
        <version>2.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.netsuite.suitetalk.client.common</groupId>
        <artifactId>suitetalk-client-common</artifactId>
        <version>1.0.0</version>
    </dependency>
    
  2. pom.xml dosyasındaki plugins etiketinde aşağıdaki kodu kullanın:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.5.2</version>
            <executions>
                <execution>
                    <id>suitetalk-proxy</id>
                    <phase>clean</phase>
                    <configuration>
                        <file>${basedir}/lib/suitetalk-axis-proxy-v2019_1-1.0.0.jar</file>
                        <repositoryLayout>default</repositoryLayout>
                        <groupId>com.netsuite.suitetalk.proxy.v2019_1</groupId>
                        <artifactId>suitetalk-axis-proxy-v2019_1</artifactId>
                        <version>1.0.0</version>
                        <packaging>jar</packaging>
                        <generatePom>true</generatePom>
                    </configuration>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                </execution>
                <execution>
                    <id>suitetalk-client</id>
                    <phase>clean</phase>
                    <configuration>
                        <file>${basedir}/lib/suitetalk-client-v2019_1-2.0.0.jar</file>
                        <repositoryLayout>default</repositoryLayout>
                        <groupId>com.netsuite.suitetalk.client.v2019_1</groupId>
                        <artifactId>suitetalk-client-v2019_1</artifactId>
                        <version>2.0.0</version>
                        <packaging>jar</packaging>
                        <generatePom>true</generatePom>
                    </configuration>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                </execution>
                <execution>
                    <id>suitetalk-client-common</id>
                    <phase>clean</phase>
                    <configuration>
                        <file>${basedir}/lib/suitetalk-client-common-1.0.0.jar</file>
                        <repositoryLayout>default</repositoryLayout>
                        <groupId>com.netsuite.suitetalk.client.common</groupId>
                        <artifactId>suitetalk-client-common</artifactId>
                        <version>1.0.0</version>
                        <packaging>jar</packaging>
                        <generatePom>true</generatePom>
                    </configuration>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    

Lib klasöründen 3 kavanoz ekliyorum:

yaylı önyükleme projesinde harici kavanoz dahil

Son olarak, mvn cleanve sonra mvn installveya 'mvn clean install' komutunu kullanın ve jar dosyasını hedef klasörden veya yükleme yolundan çalıştırın ( mvn installgünlüğe bakın ):

java -jar abc.jar

not: Eğer jenkins'te çalışıyorsanız, o zaman önce kullanın mvn cleanve sonra mvn clean installsizin için çalışacak komutu unutmayın çünkü önceki kod mvn clean installkomutuyla bağımlılık için önbelleği saklayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.