2013-07-22 99 views
5

我正在使用maven構建我的java項目,但無法成功。那麼,任何人都可以告訴我在pom.xml中需要的基本標籤和相應的值來構建一個項目嗎?另外,我如何從命令行手動添加風暴依賴項?在pom.xml中使用maven構建java項目的基本標記

我的項目的目錄結構:

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

起初我試圖Maven Link並創建pom.xml這樣的:

<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> 

但是,從那以後,我使用mvn package。它拋出此異常:

[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] ------------------------------------------------------------------------ 

之後,我用這個鏈接Maven link 2創造像這樣的pom.xml:

<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> 

這一次,它拋出此異常:

[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) 

回答

4

關於您的結構:

Maven的假設Java類是在src/main/java和資源(任何文件夾resource在和你的META-INF目錄)中src/main/resources。即使由於根目錄中的Java類(遞歸)而調整了maven,所描述的目錄結構也不起作用。爲什麼不使用默認結構?你應該有一個很好的理由來改變這一點。

風暴相關性:

你已經在你的POM鏈接到外部存儲庫。但它已被忽略。這應該按預期工作。如果你在一個代理的背後,你必須define a proxy in your settings.xml

+0

在你的建議之後,我保持我的pom.xml是這樣的。另外,我還保留了我的文件夾結構。現在我可以在目標文件夾中創建jar文件。哪些只包含META-INF,但是我的類文件缺少任何輸入?另外我正在粘貼我的pom.xml文件 4.0.0 \t com.test。newpackage \t 單詞計數 \t 0.0.1 \t 罐子 Naresh

+0

可否請你添加新的結構,你的問題?我不確定我是否理解實際狀態。請注意:文件夾「src/main/java」不應包含.class文件,而應包含未編譯的.java文件。 Maven爲你編譯它們。此文件夾中的.class文件將被忽略,不會添加到您的jar文件中! –

1

你應該至少有這3個標籤:

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

這是maven識別工件的方式,使用這3個屬性(當您定義依賴關係時)。

0

最重要的標籤是這是在錯誤消息中提到的那些:你在你的POM文件無緣

<modelVersion>4.0.0</modelVersion> 

+0

我試過使用modelVersion也沒有工作 – Naresh

+0

什麼是錯誤信息? – khmarbaise

+0

我最後在我的問題中粘貼了整個錯誤。另外,請查看我的問題頂部的我的目錄結構。如果我以這種方式使用,是否有問題? – Naresh