2014-01-12 1 views
5

[SOLVED] - но все еще ищет объяснение. Пожалуйста, смотрите внизу вопросКаков правильный способ создания пакета Java из командной строки? (проблема с Maven)


У меня нет большого опыта работы с командной строки или с помощью Maven. Я работаю над учебником из книги. Это утверждают, я должен создать файл Java

src/main/java/com/effectivemaven/chapter01/ExampleAction.java 

Что я сделал mkdir каждый каталог отдельно, т.е. mkdir com, mkdir effectivemaven, mkdir chapter01

Я создаю файл .java в каталоге chapter01.

package com.effectivemaven.chapter01; 

import org.slf4j.*; 

public class ExampleAction { 
    final Logger logger = LoggerFactory.getLogger(ExampleAction.class); 

    public boolean execute() { 
     logger.info("Example Action Executed."); 
     return true; 
    } 
} 

Когда я mvn compile, это говорит compiling 1 file to target..., но когда я смотрю на каталог ТАГЕТ, ничего не создается.

Так что я попытался создать файл другой .java без использования пакетов, только простой

public class Hello { 
    public static void main(String[] args) { 
     System.out.println("Hello"); 
    } 
} 

в каталоге java, то mvn compile и он показывает в файле target.

Итак, я полагаю, что я не создаю пакеты правильно, используя mkdir, или, возможно, я делаю что-то еще неправильно, о котором я не знаю.

Так что, в основном, я просто хочу знать, что это правильный способ создания пакета из командной строки? И если я делаю это правильно, каковы могут быть другие возможные причины: .class не создается в target?


EDIT дерево

first-webapp 
      src 
      main 
       java 
        Hello.java 
        com 
         effectivemaven 
            chapter01 
              ExampleAction.java 
      target 
       classes 
        Hello.class 
      pom.xml 

Команда работает с C:\Maven Book\first-webapp>

C:\Maven Book\first-webapp>mvn compile 
[INFO] Scanning for projects... 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building first-webapp Maven Webapp 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ first-weba 
pp --- 
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, 
i.e. build is platform dependent! 
[INFO] Copying 0 resource 
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ first-webapp 
--- 
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. b 
uild is platform dependent! 
[INFO] Compiling 2 source files to C:\Maven Book\first-webapp\target\classes 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 3.667s 
[INFO] Finished at: Sun Jan 12 00:09:49 PST 2014 
[INFO] Final Memory: 11M/111M 
[INFO] ------------------------------------------------------------------------ 
C:\Maven Book\first-webapp> 

EDIT 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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.underdogdevs.webapp</groupId> 
    <artifactId>first-webapp</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>first-webapp Maven Webapp</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>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.5</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <finalName>first-webapp</finalName> 
    </build> 
</project> 

Кстати, это веб-приложение, которое я создал с помощью следующей команды

mvn archetype-generate -DgroupId=com.underdogdevs.webapp -DartifactId=first-webapp -DarchetypeArtifactid=maven-archetype-webapp


[РЕШИТЬ] - но с очень небольшим пониманием - все еще предлагаю коричневые точки для всех, кто может объяснить мне такое поведение. Ниже приведено то, что я сделал

Я получил его для работы. Поскольку я создаю проект с помощью groupId=com.underdogdevs.webapp, я попытался сделать пакет com\underdogdevs\webapp и создал класс с соответствующей ссылкой на пакет. Это поставило проблему. Появится класс. Но я тестировал его еще больше и удалил только что созданный пакет и попытался очистить и скомпилировать только с исходной структурой пакета, но файл снова появился в исходной структуре пакета. Я понятия не имею, почему это происходит. У любого есть идеи?

+0

Можете ли вы показать вывод 'tree' или аналогичного, и' ls -la target/'из корневого каталога проекта? – chrylis

+0

У вас должно получиться сообщение об ошибке при запуске maven. – Henry

+0

пакеты только каталоги для получения дополнительной информации вы можете посмотреть [здесь] [1] [1]: http://stackoverflow.com/questions/10971838/making-a-java-package-in-the -command-line – user1798477

ответ

1

ОК, groupid не имеет отношения к структуре приложения - это часть вашего имени приложения. Вы создаете webapp, поэтому скомпилированные классы переходят в каталог WEB-INF/classes в сгенерированном файле войны (который, согласно вашему pom, называется first-webapp.war), который можно найти в каталоге target. Вам нужны справочники src/main/java, src/main/resources, src/test/java, src/test/resources, src/main/webapp/WEB-INF. В каталоге java вы должны поместить свою структуру пакета (больше каталогов), которая в этом случае равна com/effectivemaven/chapter01, и под этим поместите свой Java-файл ExampleAction.java. Поместите свой pom в свой корень проекта.

В командной строке запустите mvn clean install, и вы сгенерируете цель, и вы должны найти файл .war. В этом случае в каталоге WEB-INF/classes/com/effectivemavem/chapter01 вы найдете свой скомпилированный Java-класс с расширением .class.

В какой-то момент вам нужно будет положить файл web.xml в каталог WEB-INF.

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