2012-07-06 10 views
10

Tengo un problema muy extraño con Maven y la ETP de Eclipse. Tengo un proyecto de varios módulos, llamémoslo project. Se compone de dos módulos project-base y project-web. Tengo habilitada la resolución del espacio de trabajo (y funciona bien con muchos otros proyectos Maven muy similares).¿Por qué el complemento WTP implementa una dependencia de Maven como una carpeta, en lugar de un contenedor?

project-base es una dependencia de project-web y normalmente se implementa como un archivo jar. Sin embargo, durante varios días, que sigue siendo desplegado como una carpeta de clase en mi Tomcat locales, como se puede ver aquí: Dependency deployed as folder, not as jar

Por lo tanto, mi Tomcat no reconoce ninguna de mis archivos de clase allí, porque les espera ser frascos, no carpeta. El sufijo -tests proviene de la necesidad de tener la prueba desde la base en mi proyecto web. No creo que este sea el problema.

project-web tiene tres dependencias que se resuelven desde el área de trabajo. Dos de ellos se despliegan correctamente, como jar, pero el tercero no.

project-base 's pom.xml se muestra aquí:

<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> 
    <parent> 
     <artifactId>project</artifactId> 
     <groupId>com.company.project</groupId> 
     <version>4.0.0</version> 
    </parent> 
    <artifactId>project-base</artifactId> 
    <name>projectBase</name> 
    <packaging>jar</packaging> 

    <properties> 
     <project.build.sourceEncoding>windows-1251</project.build.sourceEncoding> 
    </properties> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.3.2</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>jar</goal> 
          <goal>test-jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-site-plugin</artifactId> 
       <version>3.0</version> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-project-info-reports-plugin</artifactId> 
       <version>2.4</version> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

La dependencia project-base tal como se define en project-web se parece a esto:

<dependency> 
    <groupId>com.company.project</groupId> 
    <artifactId>project-base</artifactId> 
    <version>${project.version}</version> 
</dependency> 

<dependency> 
    <groupId>com.company.project</groupId> 
    <artifactId>project-base</artifactId> 
    <version>${project.version}</version> 
    <type>test-jar</type> 
    <scope>test</scope> 
</dependency> 

no tengo una idea de por qué uno la dependencia se implementa de una manera tan extraña y no sé cómo solucionarlo. Limpié los proyectos, tomcat, rediseñé el proyecto web, purgué todo mi repositorio Maven, revisé todo el proyecto desde VCS, nada ayudó.

¿Qué podría hacer que Eclipse WTP despliegue esta dependencia como una carpeta en lugar de un archivo jar?

+0

Aunque no explica ** por qué **, [esta pregunta] (http://stackoverflow.com/questions/8944278/m2eclipse-and-or-wtp-not-packaging-a-dependency-correctly) proporciona un trabajo que nos ayudó – chrisbunney

+0

@chrisbunney ¡Gracias por la información! Intenté el truco, pero no funcionó para mí. Eliminé todos los archivos específicos de Eclipse y dejé que maven los regenerara, pero la situación no se modificó. – guerda

Respuesta

0

Finalmente resolví mi problema: tuve problemas con la sección de propiedades Implementación Ensamblaje para el proyecto project-base. No pude guardarlo, como menciona Eclipse, la página actual contiene errores.

Luego busqué en el archivo de configuración .settings/org.eclipse.wst.common.component. Estaba completamente vacío (no sé por qué). Luego añade el siguiente bloque:

<?xml version="1.0" encoding="UTF-8"?> 
<project-modules id="moduleCoreId" project-version="1.5.0"> 
    <wb-module deploy-name="project-base"> 
     <wb-resource deploy-path="/" source-path="/src/main/java"/> 
     <wb-resource deploy-path="/" source-path="/src/main/resources"/> 
    </wb-module> 
</project-modules> 

Después de esto, la página de configuración se puede acceder de nuevo y el JAR se ensambla correctamente. La resolución del espacio de trabajo también funciona.

2

Solo estaba teniendo el mismo problema. La actualización de m2e a la versión 1.2 lo solucionó.

3

He resuelto el problema eliminando la dependencia en la página de configuración del proyecto "Implementación de implementación" y volviéndola a agregar.

+0

Gracias por la pista. Esto no funcionó para mí, porque ni siquiera podía abrir esta página de configuración exacta. Ver mi respuesta para más detalles. – guerda

+0

Esto funcionó para mí ... qué error tan molesto. Mi anterior trabajo fue copiar/pegar manualmente el jar en la carpeta de despliegue lib: / – Selwyn

0

Si esa carpeta es un JAR explotado (entonces es como un archivo JAR, pero aparece como una carpeta, no archivada), en mi caso fue un problema de conector de servidor.

Aunque utilizo JBoss en lugar de Tomcat, esto podría ser útil para otros que luchan con este problema.

Siempre que tenga las últimas herramientas de JBoss instaladas en su Eclipse, puede hacer doble clic en el servidor en la vista Servidor para abrir la configuración.

En ficha Implementación, puede seleccionar Módulo postal Sí/No para cada proyecto. Cuando seleccioné SÍ para mis archivos jar de utilidad, JBoss implementó la dependencia como un archivo JAR normal en lugar de una carpeta.

Cuestiones relacionadas