2010-02-01 5 views
27

Tôi đang mavenizing một số dự án.Cách tốt nhất để tạo ra một hiện vật quạ từ lọ hiện có

Tất cả các dự án này phụ thuộc vào một số thư viện, hầu hết các thư viện đều có sẵn trong repo maven. Đối với các thư viện khác, tôi muốn tạo một tạo tác maven, vì vậy tôi có thể sử dụng nó như một phụ thuộc. Vấn đề là, tôi chỉ có các tệp jar của các thư viện này.

Cách tốt nhất để tạo hiện vật từ các tệp jar hiện có là gì?

+0

thể trùng lặp của [Thêm một sự phụ thuộc vào Maven] (http://stackoverflow.com/questions/396245/add-a-dependency-in-maven) –

Trả lời

2

Bạn có thể sử dụng Maven Deploy Plugin để tải lên tệp JAR của mình (và tùy chọn tệp POM, mặc dù một tệp mặc định sẽ được tạo cho bạn) vào kho lưu trữ Maven của bạn.

1

danben said, bạn sẽ phải triển khai các jar này vào kho lưu trữ. Tuy nhiên, tôi dường như hiểu từ câu hỏi của bạn rằng bạn không có một kho lưu trữ ngoại trừ một maven toàn cầu.

Bạn có thể sử dụng Nexus hoặc Artifactory.

26

Nếu bạn không sử dụng một từ xa kho (mà là một tình trạng phổ biến cho sự phát triển cá nhân), chỉ cần install những hiện vật trong kho địa phương của bạn bằng cách sử dụng install:install-file mojo:

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 

Nhưng rõ ràng, điều này sẽ làm cho xây dựng của bạn không di động (điều này có thể không phải là một vấn đề mặc dù). Để không hy sinh tính di động, bạn sẽ phải tạo các tạo phẩm có sẵn trong kho lưu trữ từ xa. Trong bối cảnh doanh nghiệp, cách phổ biến để giải quyết vấn đề đó là cài đặt kho lưu trữ doanh nghiệp (và trong trường hợp đó, đến deploy các tạo tác thực sự).

Cập nhật: Khi tạo tác của bạn được cài đặt trong kho lưu trữ địa phương của bạn, bạn chỉ cần khai báo một yếu tố <dependency> trong pom của bạn như đối với bất kỳ sự phụ thuộc khác, ví dụ .:

<dependency> 
    <groupId>aGroupId</groupId> 
    <artifactId>aArtifactId</artifactId> 
    <version>1.0.12a</version> 
    <packaging>jar</packaging> 
</dependency> 
+0

Câu hỏi tương tự như trên, không cài đặt -file giải quyết các phụ thuộc? Hay nó chỉ tải lên tệp jar vào kho lưu trữ cục bộ?Nếu trường hợp thứ hai, bạn sẽ tạo các mục phụ thuộc trong tệp pom.xml của mình như thế nào? –

+0

@Nils Không, cài đặt: tệp cài đặt sẽ không giải quyết sự phụ thuộc. Làm sao điều này xảy ra được? Maven không có bất kỳ kiến ​​thức nào về các hiện vật này và sự phụ thuộc của chúng nếu chúng không bị "mavenized". Vì vậy, trên thực tế, nó sẽ chỉ tải lên tệp jar đã chỉ định. Và tôi sẽ cập nhật câu trả lời của tôi để chỉ cho bạn cách khai báo sự phụ thuộc trong tệp pom.xml của bạn. –

+0

Được rồi, đó là phỏng đoán của tôi. Như manuel mô tả, đối phó với phụ thuộc transitive trong một cách thủ công là đau đớn. Vì vậy, suy nghĩ của tôi (và tôi nghĩ rằng điều này phản ánh bằng cách nào đó 3wh câu hỏi) là làm thế nào để đối phó với các phụ thuộc khi mavenizing một cái lọ. Tôi nhớ rằng một trong những đồng nghiệp cũ của tôi đã viết một số kịch bản nhìn vào một cái lọ, các tệp nguồn/lớp và thư mục lib, và với thông tin đó đã cố gắng tạo ra một pom với các phụ thuộc càng tốt càng tốt. Nhưng có vẻ như, điều này không bao giờ được đưa vào kho lưu trữ plugin maven. Hoặc là có cái gì đó tương tự? –

0

tôi biết vấn đề của bạn. Mavenizing lọ đôi khi là một cơn đau (đặc biệt là nếu chúng có thêm các phụ thuộc transitive, mà cũng cần phải được định nghĩa trong pom.xml).

Bạn đã kiểm tra xem các thư viện này có thực sự không bao giờ tồn tại dưới dạng maven dep không? Hãy nhìn vào các nghi phạm thông thường:

Đôi khi tôi muốn sử dụng hộp thoại jar upload Nexus để tạo ra các file pom.xml.

+0

Không nhìn theo cách thủ công, hãy sử dụng công cụ tìm kiếm: http://maven.apache.org/general.html#How_to_find_dependencies –

+0

bạn nói đúng. đó là bước đầu tiên cần làm. vẫn còn (mặc dù rất hiếm) đôi khi tôi phải tìm kiếm bằng tay, bởi vì công cụ tìm kiếm không thể tìm thấy sự phụ thuộc. –

1

Bạn cũng có thể tạo phụ thuộc 'hệ thống' trên các lọ không nằm trong kho lưu trữ trong dự án. Ví dụ,

<dependency> 
     <groupId>com.example</groupId> 
     <artifactId>MySpecialLib</artifactId> 
     <version>1.2</version> 
     <scope>system</scope> 
     <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/MySpecialLib-1.2.jar</systemPath> 
    </dependency>