开发者

Maven cleaning question

I tried to build a project. It failed. I made the correct changes and tried to build it again. I relieve the following error:

Embedded error: Directory simple already exists - please run from a clean directory


dan@dan-netbook:~/Documents/Maven/mavenbook-examples-1-SNAPSHOT/ch03-simple$ mvn archetype:create -DgroupId=org.sonatype.maven开发者_如何学Gobook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook -e
+ Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO] Reactor build order: 
[INFO]   Chapter 3 Parent Project
[INFO]   Chapter 3 Simple Project Example
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Chapter 3 Parent Project
[INFO]    task-segment: [archetype:create] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [archetype:create {execution: default-cli}]
[WARNING] This goal is deprecated. Please use mvn archetype:generate instead
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:RELEASE
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: org.sonatype.mavenbook.ch03
[INFO] Parameter: packageName, Value: org.sonatype.mavenbook
[INFO] Parameter: package, Value: org.sonatype.mavenbook
[INFO] Parameter: artifactId, Value: simple
[INFO] Parameter: basedir, Value: /home/dan/Documents/Maven/mavenbook-examples-1-SNAPSHOT/ch03-simple
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error creating from archetype

Embedded error: Directory simple already exists - please run from a clean directory
[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: Error creating from archetype
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:719)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:284)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
    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:616)
    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.plugin.MojoExecutionException: Error creating from archetype
    at org.apache.maven.archetype.mojos.MavenArchetypeMojo.execute(MavenArchetypeMojo.java:243)
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
    ... 17 more
Caused by: org.apache.maven.archetype.old.ArchetypeTemplateProcessingException: Directory simple already exists - please run from a clean directory
    at org.apache.maven.archetype.old.DefaultOldArchetype.createArchetype(DefaultOldArchetype.java:251)
    at org.apache.maven.archetype.old.DefaultOldArchetype.createArchetype(DefaultOldArchetype.java:117)
    at org.apache.maven.archetype.mojos.MavenArchetypeMojo.execute(MavenArchetypeMojo.java:227)
    ... 19 more
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7 seconds
[INFO] Finished at: Sun Dec 12 18:53:08 EST 2010
[INFO] Final Memory: 10M/26M
[INFO] ------------------------------------------------------------------------

This leads me to believe that I need to clean the directory or something. I call mvn clean but this does not fix the problem. Im sure this is a very basic question, but Im just learning. Any suggestions?

Parent:

<pre>
    <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>
  <artifactId>examples</artifactId>
  <groupId>org.sonatype.mavenbook</groupId>
  <version>1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Maven: The Definitive Guide Example Code</name>
  <description>Example Code for Maven: The Definitive Guide</description>

  <url>http://sonatype.com/book</url>

  <modules>
    <module>ch03-simple</module>
    <module>ch04-custom</module>
    <module>ch05-simple-web</module>
    <module>ch06-multi</module>
    <module>ch07-multi-spring</module>
    <module>ch08-optimize</module>
    <module>ch09-pom</module>
    <module>ch10-lifecycle</module>
    <module>ch11-profile</module>
    <module>ch12-assembly</module>
    <module>ch13-properties</module>
    <module>ch15-sitegen</module>
    <module>ch17-writing-plugins</module>
    <module>ch18-alternate-plugins</module>
  </modules>

  <build>
    <finalName>mavenbook-examples-${project.version}</finalName>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>project</descriptorRef>
          </descriptorRefs>
        </configuration>
        <executions>
          <execution>
            <id>examples</id>
            <phase>package</phase>
            <goals>
              <goal>attached</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <profiles>
      <profile>
        <id>publish</id>
        <distributionManagement>
        <site>
          <id>sonatype-site</id>
          <name>Sonatype Book Examples</name>
          <url>file:///var/www/domains/sonatype.com/www/htdocs/book/book-examples/</url>
        </site>
        </distributionManagement>
        <properties>
           <sonatype.site>file:///var/www/domains/sonatype.com/www/htdocs/</sonatype.site>
        </properties>
      </profile>
      <profile>
        <id>stage</id>
        <distributionManagement>
        <site>
          <id>sonatype-site</id>
          <name>Sonatype Book Examples</name>
          <url>file:///var/www/domains/sonatype.com/www/htdocs/book-stage/book-examples/</url>
        </site>
        </distributionManagement>
      </profile>
  </profiles>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>2.0.1</version>
      </plugin>
    </plugins>
  </reporting>

  <repositories>
    <repository>
      <id>sonatype-forge</id>
      <name>Sonatype Forge</name>
      <url>http://repository.sonatype.org/content/groups/public</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
        <repository>
          <id>Codehaus Snapshots</id>
          <url>http://snapshots.repository.codehaus.org</url>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
          <releases>
            <enabled>false</enabled>
          </releases>
        </repository>
    <repository>
      <id>Central</id>
      <url>http://repo1.maven.org/maven2</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <enabled>true</enabled>
      </releases>
    </repository>
  </repositories>

</project>
</pre>

Other Pom

<pre>
<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>
  <parent>
    <groupId>org.sonatype.mavenbook</groupId>
    <artifactId>examples</artifactId>
    <version>1-SNAPSHOT</version>
  </parent>
  <groupId>org.sonatype.mavenbook.ch03</groupId>
  <artifactId>parent</artifactId>
  <packaging>pom</packaging>
  <name>Chapter 3 Parent Project</name>
  <url>http://sonatype.com/book</url>
  <modules>
    <module>simple</module>
  </modules>
</project>
</pre>

Thanks


just in case anyone else hits this problem...I ran into the same issue (just now learning maven) and here's what worked for me:

if you downloaded the code, don't run the command from the sample chapter directory, e.g. /home/uruser/maven/mavenbook-examples-1-SNAPSHOT/ch03-simple

Just setup a new dir like /home/uruser/maven/myTestChapterThree and then run the following:

mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook -e

rookie stuff to be sure, but at least three maven noobs (myself included) have hit this wall so it could be the book's advice to download the sample chapters and then run this command that might be the issue :)


In your Application, I am confused with ArtifactId since, I see you have give as "example" where as you are passing your argument as "simple". Here is the simple example for creating a new artifact.

1. Create a new project and pom.xml for the archetype artifact

An example pom.xml for an archetype artifact looks as follows:

<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>my.groupId</groupId>
  <artifactId>my-archetype-id</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
</project>

All you need to specify is a groupId, artifactId and version. These three parameters will be needed later for invoking the archetype via archetype:create from the commandline.

2. Create the archetype descriptor

The archetype descriptor is a file called archetype.xml which must be located in the src/main/resources/META-INF/maven/ directory. An example of an archetype descriptor can be found in the quickstart archetype:

<archetype 
  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org
     /plugins/maven-archetype-plugin/archetype/1.0.0 
  http://maven.apache.org/xsd/archetype-1.0.0.xsd">
  <id>quickstart</id>
  <sources>
    <source>src/main/java/App.java</source>
  </sources>
  <testSources>
    <source>src/test/java/AppTest.java</source>
  </testSources>
</archetype>

The tag should be the same as the artifactId in the archetype pom.xml.

An optional true tag makes it possible to run the archetype:create even on existing projects.

The , , , and tags represent the different sections of the project:

<sources> = src/main/java
<resources> = src/main/resources
<testSources> = src/test/java
<testResources> = src/test/resources
<siteResources> = src/site
<sources> and <testSources> can contain <source> 
  elements that specify a source file.

and can contain elements that specify a resource file.

Place other resources such as the ones in the src/main/webapp directory inside the tag.

At this point one can only specify individual files to be created but not empty directories.

Thus the quickstart archetype shown above defines the following directory structure:

archetype
|-- pom.xml
`-- src
    `-- main
        `-- resources
            |-- META-INF
            |   `-- maven
            |       `--archetype.xml
            `-- archetype-resources
                |-- pom.xml
                `-- src
                    |-- main
                    |   `-- java
                    |       `-- App.java
                    `-- test
                        `-- java
                            `-- AppTest.java

3. Create the prototype files and the prototype pom.xml

The next component of the archetype to be created is the prototype pom.xml. Any pom.xml will do, just don't forget to the set artifactId and groupId as variables ( ${artifactId} / ${groupId} ). Both variables will be initialized from the commandline when calling archetype:create.

An example for a prototype pom.xml is:

<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>${groupId}</groupId>
  <artifactId>${artifactId}</artifactId>
  <version>${version}</version>
  <packaging>jar</packaging>

  <name>A custom project</name>
  <url>http://www.myorganization.org</url>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

4. Install the archetype and run the archetype plugin

Now you are ready to install the archetype:

mvn install

Now that you have created an archetype, you can try it on your local system by using the following command. In this command, you need to specify the full information about the archetype you want to use (its groupId, its artifactId, its version) and the information about the new project you want to create (artifactId and groupId). Don't forget to include the version of your archetype (if you don't include the version, you archetype creation may fail with a message that version:RELEASE was not found)

mvn archetype:create                                    \
  -DarchetypeGroupId=<archetype-groupId>                \
  -DarchetypeArtifactId=<archetype-artifactId>          \
  -DarchetypeVersion=<archetype-version>                \
  -DgroupId=<my.groupid>                                \
  -DartifactId=<my-artifactId>

Once you are happy with the state of your archetype, you can deploy (or submit it to ibiblio) it as any other artifact and the archetype will then be available to any user of Maven.

Alternative way to start creating your Archetype

Instead of manually creating the directory structure needed for an archetype, simply use

mvn archetype:create
  -DgroupId=[your project's group id]
  -DartifactId=[your project's artifact id]
  -DarchetypeArtifactId=maven-archetype-archetype

Afterwhich, you can now customize the contents of the archetype-resources directory, and archetype.xml, then, proceed to Step#4 (Install the archetype and run the archetype plugin).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜