Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从命令行创建Java包的正确方法是什么?(与Maven的麻烦)_Java_Maven_Command Line_Packages - Fatal编程技术网

从命令行创建Java包的正确方法是什么?(与Maven的麻烦)

从命令行创建Java包的正确方法是什么?(与Maven的麻烦),java,maven,command-line,packages,Java,Maven,Command Line,Packages,[已解决]-但仍在寻找解释。请参见问题底部 我对命令行或Maven没有太多经验。我正在写一本书中的教程。它说明我应该创建一个java文件 src/main/java/com/effectivemaven/chapter01/ExampleAction.java 我所做的是mkdir每个目录,即mkdir com,mkdir effectivemaven,mkdir chapter01 我在chapter01目录中创建.java文件 package com.effectivemaven.cha

[已解决]-但仍在寻找解释。请参见问题底部


我对命令行或Maven没有太多经验。我正在写一本书中的教程。它说明我应该创建一个java文件

src/main/java/com/effectivemaven/chapter01/ExampleAction.java
我所做的是
mkdir
每个目录,即
mkdir com
mkdir effectivemaven
mkdir chapter01

我在
chapter01
目录中创建.java文件

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
时,它会说
将1个文件编译成目标…
,但当我查看taget目录时,没有创建任何内容

因此,我尝试在不使用包的情况下创建另一个.java文件,只是一个简单的

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}
java
目录中,然后
mvn compile
并显示在
target
文件中

因此,我的假设是,我没有通过使用
mkdir
正确创建包,或者可能是我做了一些我不知道的其他错误

基本上我只想知道,从命令行创建包的正确方法是什么?如果我做得正确,还有什么其他可能的原因导致
.class
没有在
目标中创建?


编辑树

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>

根据要求编辑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>

4.0.0
com.underdogdevs.webapp
第一个网络应用
战争
1.0-快照
第一个webapp Maven webapp
http://maven.apache.org
朱尼特
朱尼特
3.8.1
测试
org.slf4j
slf4j api
1.7.5
第一个网络应用

顺便说一下,这是我用以下命令创建的一个web应用程序

mvn原型生成-DgroupId=com.underdogdevs.webapp-DartifactId=first webapp-DarchetypeArtifactid=maven原型webapp


[SOLVED]-但理解力很低-仍然为任何能向我解释这种行为的人提供布朗尼点数。下面是我所做的

我让它工作了。由于我使用
groupId=com.underdogdevs.webapp
创建项目,因此我尝试创建一个包
com\underdogdevs\webapp
,并使用相应的包引用创建了一个类。这解决了问题。该类将出现。但是我对它进行了进一步的测试,删除了我刚刚创建的包,并试图仅使用原始包结构进行清理和编译,但是文件再次出现在原始包结构中。我不知道为什么会这样,有人有什么想法吗


好的,
groupid
与应用程序结构无关,它是应用程序名称的一部分。您正在构建一个webapp,因此编译的类将进入生成的war文件(根据pom称为
first webapp.war
)中的
WEB-INF/classes
目录,该文件可以在
目标
目录中找到。您需要目录
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
目录中。

您能显示
树的输出吗,和项目根目录中的
ls-la target/
?运行maven时,您应该会收到一条错误消息。程序包只是目录,有关详细信息,请查看[here][1][1]:@JoopEggen相同的结果,仍然没有
。class
文件或程序包树created@drorb我让它工作了。由于我使用
groupId=com.underdogdevs.webapp
创建项目,因此我尝试创建一个包
com\underdogdevs\webapp
,并使用相应的包引用创建了一个类。这解决了问题。该类将出现。但我进一步测试了它,删除了我刚刚创建的包,并试图清理和编译,但该文件再次出现在原始包结构中。我不知道为什么会这样。你有什么想法吗?