zte z835 z831 intentos maven

z835 - Haciendo maven hacer copias de archivos entre construir y correr



unlock zte z835 (4)

Pregunta revisada (pregunta anterior a continuación):

Problema: al generar y ejecutar un proyecto de complemento Jenkins en NetBeans con Maven, el cargador de clases Java utilizado por log4j no encuentra algunos archivos (como el archivo de configuración, un appender personalizado, el controlador JDBC). Deben ser copiados a otra ubicación debajo del target , y luego se encuentran.

La solución que creo que quiero es la siguiente: quiero darle a Maven un argumento (s) de línea de comandos adicional , configurado en NetBeans. Esto debería hacer que los expertos hagan un paso adicional después de construir y antes de ejecutar cualquier cosa . El paso puede ser la copia del archivo (especificada en pom.xml o por los argumentos del comando), o puede estar ejecutando un script (especificado en pom.xml o por los argumentos de la línea de comando).

¿Qué agregar a pom.xml? ¿Algún plugin de maven?

Pregunta antigua (para referencia)

Tengo un proyecto experto para "my-jenkins-plugin". Necesito usar log4j con él. Actualmente tengo log4j.xml en esta ruta:

./src/main/resources/log4j.xml

Cuando limpio y construyo en Netbeans, se copia en estos lugares:

./target/classes/log4j.xml ./target/generated-classes/emma/classes/log4j.xml ./target/my-jenkins-plugin/WEB-INF/classes/log4j.xml

Sin embargo, log4j no encuentra el archivo de ninguna de estas ubicaciones. Necesito copiarlo manualmente a esta ubicación:

./target/work/webapp/WEB-INF/classes/log4j.xml

Y luego funciona como se espera.

Más detalles: Maven 2, Netbeans 7.2. Es el complemento estándar de Jenkins, proyecto creado originalmente con mvn hpi:create , y Netbeans usa Jetty para ejecutar Jenkins. Classpath utilizado cuando se ejecuta en NetBeans es java.class.path=C:/work/maven/boot/classworlds-1.1.jar (que es un jar existente) y no he encontrado una manera de agregar nada a este classpath, pero Si agrego log4j.xml a la raíz de ese archivo jar, también se encuentra y funciona (obviamente, esta no es una solución satisfactoria). Sé si log4j funciona o no simplemente mirando la salida de la consola, ya sea con las líneas de registro correctas o con el temido log4j:WARN No appenders could be found for logger (TestLog). log4j:WARN Please initialize the log4j system properly. log4j:WARN No appenders could be found for logger (TestLog). log4j:WARN Please initialize the log4j system properly. error y nada mas

Pregunta : ¿Cómo puedo tener cualquiera

  • el log4j.xml encontrado en el primer conjunto de ubicaciones,
  • o log4j.xml encontrado en una ubicación fuera del directorio de destino , como C: / log4j / log4j.xml
  • o haga que Maven y / o NetBeans copien log4j.xml a una ubicación donde se encuentre ahora
  • ¿O cualquier otra forma agradable de dejarme dar mi plugin log4j.xml después de limpiar y compilar automáticamente, cuando se realiza la depuración con NB?

Así es como conseguí que Maven copie los archivos .class y .jar en una nueva ubicación antes de ejecutar hpi:run goal. El log4j.xml todavía se copia en mi código Java en un bloque static{} antes de instanciar log4j. Para usar este perfil, agregué -P netbeans a maven args de línea de comando en Netbeans:

Definición de perfil y plugin en pom.xml :

<profiles> <profile> <id>netbeans</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>copy</id> <phase>compile</phase> <configuration> <target> <ant antfile="${basedir}/log4j/ant.xml"> <target name="log4jcopy"/> </ant> </target> </configuration> <goals> <goal>run</goal> <!-- means antrun:run --> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>

Construye XML para ant, log4j/ant.xml :

<project default="log4jcopy"> <target name="log4jcopy"> <echo message="Copying class files so that log4j finds them at runtime."/> <copy verbose="true" todir="target/work/webapp/WEB-INF/lib"> <fileset dir="log4j" includes="mysql-connector-java-5.1.6.jar" /> </copy> <copy verbose="true" todir="target/work/webapp/WEB-INF/classes/hyde/jenkins/myplugin"> <fileset dir="target/classes/hyde/jenkins/plugins/myplugin" includes="LogAppender*.class" /> </copy> </target> </project>


Puede usar el complemento Ant de Maven para ejecutar un script Ant que hizo la copia, o usar el complemento de recursos de Maven , que parece orientado a su caso de uso exacto de copiar material al directorio de salida.

También tenga en cuenta que puede parametrizar su construcción como se describe here (ignore la parte de Jenkins de ese título, la respuesta se relaciona con el uso general de Maven).


Puede utilizar el complemento de copia de artefactos . Como en Hudson.


Puedes usar este plugin en un perfil:

<pluginRepositories> <pluginRepository> <id>evgenyg</id> <name>Evgeny Goldin repo</name> <url>http://evgenyg.artifactoryonline.com/evgenyg/repo/com/github/goldin/</url> </pluginRepository> </pluginRepositories> <profiles> <profile> <id>copy</id> <build> <plugins> <plugin> <groupId>com.github.goldin</groupId> <artifactId>copy-maven-plugin</artifactId> <version>0.2.5</version> <executions> <execution> <id>create-archive</id> <phase>generate-resources</phase> <goals> <goal>copy</goal> </goals> <configuration> <resources> <resource> <targetPath>${project.build.outputDirectory}/work/webapp/WEB-INF/classes/</targetPath> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>log4j.xml</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>

Para activar: mvn -Pcopy generate-resources