2010-04-02 33 views
7

Tôi có các dự án cần được xây dựng với một phiên bản cụ thể của JDK.Phụ thuộc vào dự án Maven so với phiên bản JDK

Sự cố không có trong tham số nguồn và đích nhưng trong các lọ của thời gian chạy được sử dụng trong quá trình biên dịch. Trong một số trường hợp, tôi nhận được một lỗi biên dịch nếu tôi cố gắng biên dịch với JDK sai, nhưng đôi khi việc xây dựng thành công và tôi gặp lỗi thời gian chạy khi sử dụng các lọ.

Ví dụ trong nhật thực tôi có khả năng thiết lập môi trường thực thi cho dự án trong tệp .classpath.

Có cách nào để xử lý tình huống như vậy trong maven không?

Điều tôi muốn có là khả năng xử lý sự phụ thuộc JRE như các phụ thuộc khác của dự án trong tệp POM.

CẬP NHẬT:

Giải pháp được chấp nhận là giải pháp tốt nhất khi tôi đặt câu hỏi này, vì vậy tôi sẽ không thay đổi. Trong khi đó một giải pháp mới cho loại vấn đề này đã được giới thiệu: Maven Toolchain. Theo liên kết để biết thêm chi tiết.

Trả lời

2

tôi đã tìm thấy bài viết này:

http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html

<project> 
    [...] 
    <build> 
    [...] 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.1</version> 
     <configuration> 
      <verbose>true</verbose> 
      <fork>true</fork> 
      <executable>${JAVA_1_4_HOME}/bin/javac</executable> 
      <compilerVersion>1.3</compilerVersion> 
     </configuration> 
     </plugin> 
    </plugins> 
    [...] 
    </build> 
    [...] 
</project> 
+0

Cảm ơn, điều này giải quyết được vấn đề của tôi –

1

Tôi tin rằng điều này có thể được giải quyết với sau plugin trong pom của bạn:

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 

Ở đây bạn nhắm mục tiêu phiên bản 1.6, hoặc viết phiên bản của riêng bạn

+1

Không, như tôi đã nói nó không phải là một câu hỏi về thông số nguồn và mục tiêu vì ảnh hưởng này chỉ cách biên dịch đọc ngôn ngữ (source) và tạo ra bytecode (đích) nhưng không phải là các thư viện được sử dụng trong trình biên dịch. Nếu bạn biên dịch bằng 1,6 jdk một dự án với 1,5 là tham số nguồn/đích, bạn vẫn có thể nhận được một jar không hợp lệ để thực thi với 1,5 jre (ví dụ: có thể có vấn đề với các phương thức quá tải trong các lớp thư viện). –

+0

@Andrea sau đó giải pháp Pascal là câu trả lời – ant

+0

có, tôi nghĩ hồ sơ là những gì bạn cần. –

2

tôi có dự án mà cần phải được xây dựng với một phiên bản cụ thể của JDK.

Bạn có thể sử dụng Maven Enforcer plugin để thực thi việc sử dụng một phiên bản đặc biệt của JDK:

<project> 
    [...] 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <requireJavaVersion> 
        <version>1.5</version> 
       </requireJavaVersion> 
       </rules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

Nhưng tôi không chắc là tôi thực sự hiểu câu hỏi. Nếu đây không phải là những gì bạn muốn, có thể bạn có thể khai báo các phụ thuộc JDK cụ thể của bạn trong các cấu hình và sử dụng một kích hoạt kích hoạt dựa trên phiên bản JDK. Ví dụ:

<profiles> 
    <profile> 
    <activation> 
     <jdk>1.5</jdk> 
    </activation> 
    ... 
    </profile> 
</profiles> 

Cấu hình này sẽ kích hoạt cấu hình khi phiên bản JDK bắt đầu bằng "1,5".

+0

Cảm ơn plugin thực thi thực sự hữu ích đối với tôi ngay cả khi nó không giải quyết được hoàn toàn vấn đề của tôi. –

Các vấn đề liên quan