2013-07-22 45 views
5

Tôi đang xây dựng dự án java của mình bằng cách sử dụng maven nhưng không thể thành công. Vì vậy, bất cứ ai có thể xin vui lòng cho tôi biết các thẻ cần thiết và giá trị tương ứng của họ yêu cầu trong pom.xml để xây dựng một dự án? Ngoài ra, làm thế nào để tôi thêm các phụ thuộc cơn bão bằng tay từ dòng lệnh?Thẻ khái quát để xây dựng dự án java bằng cách sử dụng maven trong pom.xml

cấu trúc thư mục My của dự án:

ROOT 
| 
|----com--->test----->newpackage---->*.class 
|--- META-INF------>MANIFEST.MF 
|----resource----->words.txt 
|----pom.xml 
|-----*.jar 

Ban đầu tôi đã cố gắng Maven Link và tạo pom.xml như thế này:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>1.6</version> 
     <executions> 
      <execution> 
      <phase>com.test.newpackage</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Nhưng, sau đó tôi sử dụng mvn package. Nó ném ngoại lệ này:

[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[ERROR] FATAL ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Error building POM (may not be this project's POM). 


Project ID: unknown 
POM Location: /home/naresh/Desktop/SharedFolder/StormEclipse/pom.xml 

Reason: Not a v4.0.0 POM. for project unknown at /home/naresh/Desktop/SharedFolder/StormEclipse/pom.xml 


[INFO] ------------------------------------------------------------------------ 
[INFO] Trace 
org.apache.maven.reactor.MavenExecutionException: Not a v4.0.0 POM. for project unknown at /home/naresh/Desktop/SharedFolder/StormEclipse/pom.xml 
    at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:404) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:272) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:362) 
    at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315) 
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255) 
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) 
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375) 
Caused by: org.apache.maven.project.InvalidProjectModelException: Not a v4.0.0 POM. for project unknown at /home/naresh/Desktop/SharedFolder/StormEclipse/pom.xml 
    at org.apache.maven.project.DefaultMavenProjectBuilder.readModel(DefaultMavenProjectBuilder.java:1599) 
    at org.apache.maven.project.DefaultMavenProjectBuilder.readModel(DefaultMavenProjectBuilder.java:1571) 
    at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromSourceFileInternal(DefaultMavenProjectBuilder.java:506) 
    at org.apache.maven.project.DefaultMavenProjectBuilder.build(DefaultMavenProjectBuilder.java:200) 
    at org.apache.maven.DefaultMaven.getProject(DefaultMaven.java:604) 
    at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:487) 
    at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:391) 
    ... 12 more 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: < 1 second 
[INFO] Finished at: Mon Jul 22 14:38:24 IST 2013 
[INFO] Final Memory: 1M/15M 
[INFO] ------------------------------------------------------------------------ 

Sau đó tôi được sử dụng liên kết này Maven link 2 và tạo ra pom.xml như thế này:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test.newpackage</groupId> 
    <artifactId>wordcount</artifactId> 
    <version>0.0.1</version> 
    <build> 
     <plugins> 
      <plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
    <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
    </descriptorRefs> 
    <archive> 
     <manifest> 
     <mainClass>com.test.newpackage</mainClass> 
     </manifest> 
    </archive> 
    </configuration> 
</plugin> 
     </plugins> 
    </build> 
    <repositories> 
     <!-- Repository where we can found the storm dependencies <repository> 
      <id>clojars.org</id> <url>http://clojars.org/repo</url> </repository> --> 
    </repositories> 
    <dependencies> 
     <!-- Storm Dependency --> 
     <dependency> 
      <groupId>storm</groupId> 
      <artifactId>storm</artifactId> 
      <version>0.8.1</version> 
     </dependency> 
    </dependencies> 
</project> 

Lần này nó ném ngoại lệ này:

[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Failed to resolve artifact. 

Missing: 
---------- 
1) storm:storm:jar:0.8.1 

    Try downloading the file manually from the project website. 

    Then, install it using the command: 
     mvn install:install-file -DgroupId=storm -DartifactId=storm -Dversion=0.8.1 -Dpackaging=jar -Dfile=/path/to/file 

    Alternatively, if you host your own repository you can deploy the file there: 
     mvn deploy:deploy-file -DgroupId=storm -DartifactId=storm -Dversion=0.8.1 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id] 

    Path to dependency: 
    1) com.test.newpackage:wordcount:jar:0.0.1 
    2) storm:storm:jar:0.8.1 

---------- 
1 required artifact is missing. 

for artifact: 
    com.test.newpackage:wordcount:jar:0.0.1 

from the specified remote repositories: 
    central (http://repo1.maven.org/maven2) 

Trả lời

4

Về cấu trúc của bạn:

Maven giả định các lớp học java được trong src/main/java và các nguồn tài nguyên (bất cứ điều gì trong thư mục của bạn resource và dir META-INF của bạn) trong src/main/resources. Cấu trúc thư mục mà bạn mô tả sẽ không hoạt động ngay cả khi bạn tinh chỉnh maven một chút vì các lớp java trong thư mục gốc (đệ quy). Tại sao bạn không sử dụng cấu trúc mặc định? Bạn thực sự cần phải có một lý do chính đáng để thay đổi điều này.

bão Phụ thuộc:

Bạn đã có liên kết đến kho lưu trữ bên ngoài trong POM của mình. Nhưng nó bị vượt trội. Điều này sẽ hoạt động như mong đợi. Nếu bạn đứng sau proxy, bạn phải define a proxy in your settings.xml

+0

Sau khi đề xuất của bạn tôi đã giữ pom.xml của tôi để được như thế này. Ngoài ra, tôi đã giữ cấu trúc thư mục của tôi như bạn đã nói. Bây giờ tôi có thể tạo tệp jar trong thư mục đích. Chỉ chứa META-INF, nhưng các tệp lớp của tôi thiếu bất kỳ đầu vào nào? Ngoài ra tôi đang dán tệp pom.xml của tôi 4.0.0 \t com.test.newpackage \t Số từ \t 0.0.1 \t jar Naresh

+0

thể bạn vui lòng thêm cấu trúc mới cho câu hỏi của bạn? Tôi không chắc liệu tôi có hiểu trạng thái thực tế là gì không. Xin lưu ý: Thư mục 'src/main/java' không nên chứa các tệp .class nhưng các tệp .java chưa được biên dịch. Maven biên dịch chúng cho bạn. Các tệp .class trong thư mục này sẽ bị bỏ qua và sẽ không được thêm vào tệp jar của bạn! –

1

Bạn nên có ít nhất 3 thẻ đó:

<groupId>...</groupId> 
<artifactId>...</artifactId> 
<version>...</version> 

Đó là cách maven xác định một tạo phẩm, sử dụng 3 thuộc tính đó (khi bạn định nghĩa một phụ thuộc).

0

Các thẻ quan trọng nhất là những người được đề cập trong thông báo lỗi:

<modelVersion>4.0.0</modelVersion> 

mà bạn bỏ lỡ trong tập tin pom của bạn.

+0

tôi đã thử sử dụng modelVersion cũng nhưng không hoạt động – Naresh

+0

Và thông báo lỗi là gì? – khmarbaise

+0

Tôi đã dán toàn bộ lỗi trong câu hỏi của tôi ở cuối. Ngoài ra, hãy kiểm tra cấu trúc thư mục của tôi ở đầu câu hỏi của tôi. Có vấn đề gì nếu tôi sử dụng theo cách này? – Naresh

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