Saya memiliki JAR di proyek Android saya dan saya ingin itu ditambahkan ke APK akhir. Oke, ini dia:
<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>
Tapi saat saya berlari, mvn package
saya mendapat peringatan:
[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
Dan di APK final tidak ada JAR.
Bagaimana cara memperbaikinya?
Jawaban:
Anda perlu menambahkan toples ke repositori maven lokal Anda. Alternatifnya (opsi yang lebih baik) tentukan repositori yang tepat (jika ada) sehingga dapat diunduh secara otomatis oleh maven
Dalam kedua kasus tersebut, hapus
<systemPath>
tag dari ketergantungansumber
maven install
di setiap komputer tempat saya ingin membangun proyek itu (sayangnya saya tidak menemukan JAR ini di repo). Terima kasih! :)Saya tidak tahu alasan sebenarnya tetapi Maven mendorong pengembang untuk menginstal semua perpustakaan (juga kustom) ke dalam beberapa repositori maven, jadi
scope:system
tidak terlalu disukai, Solusi sederhana adalah dengan menggunakanmaven-install-plugin
ikuti penggunaannya:
tulis ketergantungan Anda dengan cara ini
<dependency> <groupId>com.mylib</groupId> <artifactId>mylib-core</artifactId> <version>0.0.1</version> </dependency>
lalu, tambahkan maven-install-plugin
<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>
perhatikan
phase:clean
, untuk menginstal pustaka kustom Anda ke dalam repositori, Anda harus menjalankanmvn clean
dan kemudianmvn install
sumber
<phase>process-resources</phase>
sebagai gantinya<phase>clean</phase>
. Fase sumber daya proses terlihat lebih sesuai untuk skenario seperti itu dan selalu dipanggil sebelum fase kompilasi.clean
fase sangat menyesatkan, itu bukan bagian dari siklus hidup default, dan mendistorsi artinyaclean
. Lebih lanjut, perubahan yang disarankan untuk menggunakan fase dalam siklus hidup default (misalnyavalidate
atauprocess-resources
) akan gagal dalam situasi multi-modul, karena resolusi ketergantungan dicoba oleh aggregator, sebelum tujuan kustom apa pun yang dijalankan untuk modul anak.<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin>
Coba ini.
sumber
Cakupan sistem hanya dirancang untuk menangani file 'sistem'; file duduk di beberapa lokasi tetap. File dalam
/usr/lib
, atau${java.home}
(mistools.jar
.). Itu tidak dirancang untuk mendukung.jar
file lain-lain dalam proyek Anda.Penulis dengan sengaja menolak untuk membuat perluasan nama jalur berfungsi dengan benar untuk itu untuk membuat Anda putus asa. Hasilnya, dalam jangka pendek Anda dapat menggunakan
install:install-file
untuk menginstal ke repo lokal, dan kemudian suatu hari menggunakan manajer repo untuk berbagi.sumber
Gunakan manajer repositori dan instal toples semacam ini ke dalamnya. Itu memecahkan masalah Anda sama sekali dan untuk semua komputer di jaringan Anda.
sumber
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
- lihat hub.docker.com/r/sonatype/nexus3 untuk detailnya.Coba konfigurasi ini. Ini berhasil untuk saya:
<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>
sumber
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
Instal jar ke repositori lokal.
sumber
Berkat Ging3r saya mendapat solusi:
ikuti langkah ini:
jangan gunakan dalam tag ketergantungan. Gunakan tag berikut dalam dependensi di file pom.xml ::
<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>
gunakan kode berikut di tag plugin di file pom.xml:
<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>
Saya termasuk 3 botol dari folder lib:
Terakhir, gunakan
mvn clean
dan kemudianmvn install
atau 'mvn clean install' dan jalankan file jar dari folder target atau jalur di mana install (lihatmvn install
log):java -jar abc.jar
Catatan: Ingat satu hal jika Anda bekerja di jenkins kemudian gunakan pertama
mvn clean
dan kemudianmvn clean install
perintah bekerja untuk Anda karena dengan kode sebelumnyamvn clean install
menyimpan cache untuk ketergantungan.sumber