Dự án chạy Maven


231

Có "pha" hay "mục tiêu" Maven để thực hiện đơn giản phương thức chính của lớp Java không? Tôi có một dự án mà tôi muốn kiểm tra bằng tay chỉ bằng cách thực hiện một cái gì đó như "mvn run".

Câu trả lời:


348

Xem plugin exec maven . Bạn có thể chạy các lớp Java bằng cách sử dụng:

mvn exec:java -Dexec.mainClass="com.example.Main" [-Dexec.args="argument1"] ...

Việc gọi có thể đơn giản như mvn exec:javathể cấu hình plugin nằm trong tệp pom.xml của bạn. Trang web plugin trên Mojohaus có một ví dụ chi tiết hơn .

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>com.example.Main</mainClass>
                    <arguments>
                        <argument>argument1</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

14
Đây là cách một câu trả lời sẽ như thế nào! tham khảo + ví dụ đơn giản + ví dụ phức tạp. ví dụ đơn giản đã thực hiện thủ thuật cho tôi (không cần thêm cấu hình)
mã hóa

1
Có phiên bản mới hơn của plugin này (mới hơn 1.2.1 không?)
Alexander Mills

Có, có phiên bản mới hơn, vì vậy đừng sao chép đoạn trên 1 thành 1 trừ khi bạn muốn sử dụng phiên bản 1.2.1 Xem mojohaus.org/exec-maven-plugin/usage.html cho phiên bản mới nhất Hiện tại đó là 1.6.0
dùng1053510

Cảm ơn, bạn cũng sẽ biết cách chạy một lớp chính nếu trong mô hình con với các phụ thuộc trong các mô-đun khác?
dùng1767316

Điều này không thực sự chạy lớp chính
Dexter

23

1. Chỉnh sửa POM.xml

Thêm thuộc tính sau vào pom.xml. Hãy chắc chắn rằng bạn sử dụng tên lớp đủ điều kiện (nghĩa là với tên gói) có chứa mainphương thức:

<properties>
        <exec.mainClass>fully-qualified-class-name</exec.mainClass>
</properties>

2. Chạy lệnh

Bây giờ từ thiết bị đầu cuối, kích hoạt lệnh sau:

mvn clean compile exec:java

LƯU Ý Bạn có thể truyền thêm đối số qua -Dexec.args="xxx"cờ.


Điều này thực sự làm việc? Tôi đã thử cả hai: <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> và <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass> và nó không hoạt động . Lỗi là như nhau: [ERROR] Không thể thực hiện mục tiêu org.codehaus.mojo: exec-maven-plugin: 1.6.0: java (default-cli) trên dự án newtrex: Tham số 'mainClass' cho mục tiêu org.codehaus.mojo : exec-maven-plugin: 1.6.0: java bị thiếu hoặc không hợp lệ -> [Trợ giúp 1]
Nenad Bulatovic

Nó hoạt động, bạn có thể muốn kiểm tra bài đăng này
Saikat

@NenadBulatovic: Nó hoạt động nếu bạn thay thế $ {foo.bar.SomeMainClass} bằng foo.bar.SomeMainClass -> không có $ hoặc {}
Krishna Santosh Sampath

14

Các câu trả lời được đề cập ở trên là chính xác nhưng tôi đang đơn giản hóa nó cho các noobs như tôi. Đi đến tệp pom của dự án của bạn. Thêm một thuộc tính mới exec.mainClassvà đưa ra giá trị của nó là lớp chứa phương thức chính của bạn. Đối với tôi nó là DriverClasstrong mainpkg. Thay đổi nó theo dự án của bạn. nhập mô tả hình ảnh ở đây

Đã thực hiện điều này đến thư mục chứa dự án của bạn pom.xml và chạy nó trên dấu nhắc lệnh mvn exec:java. Điều này nên gọi phương thức chính.


8

Không cần thêm plugin mới trong pom.xml. Chỉ cần chạy lệnh này

mvn org.codehaus.mojo:exec-maven-plugin:1.5.0:java -Dexec.mainClass="com.example.Main" | grep -Ev '(^\[|Download\w+:)' 

Xem plugin maven exec để sử dụng nhiều hơn.


Vượt qua các đối số khác thông qua-Dexec.args="...arg..."
sstn


2

clean package exec:java -P Class_Containing_Main_Method lệnh cũng là một tùy chọn nếu bạn chỉ có một phương thức Chính (PSVM) trong dự án, với Cài đặt Maven sau.

Đừng quên đề cập đến lớp học trong <properties></properties>phần pom.xml:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.main.class>com.test.service.MainTester</java.main.class>
</properties>

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
           <mainClass>${java.main.class}</mainClass>
        </configuration>
</plugin>

Cấu hình chạy STS cùng với Cài đặt Maven ở trên:

nhập mô tả hình ảnh ở đây


Điều đó không đúng với tôi. Không phải là -P cho 'hồ sơ'? Nếu bạn chỉ định nó trên dòng lệnh tại sao bạn cần đặt nó trong thuộc tính plugin?
Rup

@Rup Có, -Plà cho hồ sơ. Đã chia sẻ điều này, vì nó cũng là một tùy chọn chạy dự án Maven.
Abhijeet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.