2015-01-05 2 views
2

Я пытаюсь использовать NATTY, включив его как зависимость от maven. Я просто сделал Hello, World Maven tutorial - но в остальном не знаком с Maven. Инструкции на сайте natty говорят включить natty в качестве зависимости в pom.xml. Я сделал так, как этотЧто случилось с тем, как я использую maven для создания natty?

<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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>my-app</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>my-app</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.joestelmach</groupId> 
     <artifactId>natty</artifactId> 
     <version>0.9</version> 
    </dependency> 
    </dependencies> 
</project> 

Я затем запустить $mvn package и проект строит успешно. Я вижу один файл jar в моей/target: my-app-1.0-SNAPSHOT.jar, поэтому я предполагаю, что в jar-файлы застряли вложенные зависимости.

Для тестирования, я создаю простой класс в файле с именем Temporary.java провести Natty демонстрационный код:

import com.joestelmach.natty.*; 
import com.joestelmach.natty.generated.*; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 
import java.util.Map; 

public class Temporary{ 
    public static void main(String [] args) { 
     Parser parser = new Parser(); 
     List groups = parser.parse("the day before next thursday"); 
     for (DateGroup group : groups) { 
      List dates = group.getDates(); 
      int line = group.getLine(); 
      int column = group.getPosition(); 
      String matchingValue = group.getText(); 
      String syntaxTree = group.getSyntaxTree().toStringTree(); 
      Map parseMap = group.getParseLocations(); 
      boolean isRecurreing = group.isRecurring(); 
      Date recursUntil = group.getRecursUntil(); 
     } 
    } 
} 

Но когда я бегу $ javac -cp target/my-app-1.0-SNAPSHOT.jar Temporary.java я получаю

Temporary.java:1: error: package com.joestelmach.natty does not exist 
import com.joestelmach.natty.*; 

Что я делать не так?

+1

Во-первых, nitpick на заголовок вопроса: вы не строите natty. Вы строите что-то еще с зависимостью от natty. Во-вторых, чтобы выяснить ответ @ medium, у банка, который вы создали, все еще есть зависимость от natty - это означает, что natty.jar должен быть в вашем пути к классам. Ваша банка автоматически не включает natty.jar. Существует множество способов исправить это; средний показывает тот, который будет включать все классы natty внутри вашей банки, что может быть или не быть желательным. – dcsohl

ответ

1

Вам необходимо убедиться, что при упаковке вашей банки с использованием maven ваши зависимости включены.

Я считаю, что вам нужно, чтобы добавить это к вашему pom.xml

<plugin> 
 
    <artifactId>maven-assembly-plugin</artifactId> 
 
    <configuration> 
 
    <descriptorRefs> 
 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
 
    </descriptorRefs> 
 
    <archive> 
 
     <manifest> 
 
     <mainClass></mainClass> 
 
     </manifest> 
 
    </archive> 
 
    </configuration> 
 
    <executions> 
 
    <execution> 
 
     <id>make-assembly</id> 
 
     <phase>package</phase> 
 
     <goals> 
 
     <goal>single</goal> 
 
     </goals> 
 
    </execution> 
 
    </executions> 
 
</plugin>

Убедитесь при запуске его использовании .jar, который имеет «банку-с-dependencies.jar " в конце. Это обеспечит включение вашей зависимости.

+0

благодарит за вашу помощь. Я не знал, где разместить заявление плагина, но нашел ответ здесь http://stackoverflow.com/questions/10547504/plugins-in-maven-and-pom-xml – bernie2436

Смежные вопросы