Основные теги для создания проекта Java с использованием maven в pom.xml

Я создаю свой java-проект, используя maven, но не смог добиться успеха. Итак, может ли кто-нибудь сказать мне основные теги и соответствующие им значения, необходимые в pom.xml для создания проекта? Кроме того, как добавить зависимости от шторма вручную из командной строки?

Моя структура каталогов проекта:

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)

person Naresh    schedule 22.07.2013    source источник


Ответы (3)


О вашей структуре:

Maven предполагает, что классы Java находятся в src/main/java, а ресурсы (что-либо в вашей папке resource и вашем каталоге META-INF) в src/main/resources. Описанная вами структура каталогов не будет работать, даже если вы немного настроите maven из-за классов java в корневом каталоге (рекурсия). Почему бы вам не использовать структуру по умолчанию? У вас действительно должна быть веская причина, чтобы изменить это.

шторм Зависимость:

У вас уже есть ссылка на внешний репозиторий в вашем POM. Но это закомментировано. Это должно работать, как ожидалось. Если вы используете прокси-сервер, вам необходимо определить прокси-сервер в файле settings.xml

person Marc von Renteln    schedule 22.07.2013
comment
После ваших предложений я сохранил свой pom.xml таким. Кроме того, я сохранил структуру папок, как вы сказали. Теперь я могу создать файл jar в целевой папке. Которые содержат только META-INF, но в моих файлах классов отсутствуют какие-либо входные данные? Также я вставляю свой файл pom.xml ‹modelVersion›4.0.0‹/modelVersion› ‹groupId›com.test.newpackage‹/groupId› ‹artifactId›wordcount‹/artifactId› ‹version›0.0.1‹/version› ‹ упаковка›баночка/упаковка› - person Naresh; 22.07.2013
comment
Не могли бы вы добавить новую структуру к вашему вопросу? Я не уверен, понимаю ли я, что такое фактическое состояние. Обратите внимание: папка src/main/java не должна содержать файлы .class, а некомпилированные файлы .java. Maven компилирует их для вас. Файлы .class в этой папке будут игнорироваться и не будут добавлены в ваш jar-файл! - person Marc von Renteln; 22.07.2013

У вас должны быть как минимум эти 3 тега:

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

Это способ, которым maven идентифицирует артефакт, используя эти 3 свойства (когда вы определяете зависимость).

person Bax    schedule 22.07.2013

Наиболее важными тегами являются те, которые упоминаются в сообщении об ошибке:

<modelVersion>4.0.0</modelVersion>

который вы пропустили в своем файле pom.

person khmarbaise    schedule 22.07.2013
comment
В последний раз я вставил всю ошибку в свой вопрос. Кроме того, пожалуйста, проверьте мою структуру каталогов в верхней части моего вопроса. Есть ли проблема, если я использую таким образом? - person Naresh; 22.07.2013