Подтвердить что ты не робот

Создание maven делает копирование файлов между зданием и запуском

Пересмотренный вопрос (старый вопрос ниже):

Проблема: при создании и запуске проекта плагина Jenkins в NetBeans с использованием Maven загрузчик классов Java, используемый log4j, не находит файлы (например, файл конфигурации, пользовательский приложение, JDBC-драйвер). Их нужно скопировать в другое место под target, а затем они будут найдены.

Я думаю, что это решение: Я хочу предоставить maven дополнительный аргумент командной строки, настроенный в NetBeans. Это должно сделать maven сделать дополнительный шаг после сборки и перед запуском чего-либо. Этот шаг может быть либо копированием файлов (указанным в pom.xml, либо аргументами команды), либо может быть запущен script (указанный в pom.xml или аргументами командной строки).

Что добавить в pom.xml? Какой-то плагин maven?


Старый вопрос (для справки)

У меня есть проект maven для "my-jenkins-plugin". Мне нужно использовать log4j. В настоящее время у меня есть log4j.xml по этому пути:

./src/main/resources/log4j.xml

Когда я очищаю и создаю Netbeans, он копируется в эти места:

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

Однако log4j не находит файл из любого из этих мест. Мне нужно вручную скопировать его в это место:

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

И тогда он работает так, как ожидалось.

Подробнее: Maven 2, Netbeans 7.2. Это стандартный плагин Jenkins, проект изначально созданный с помощью mvn hpi:create, а Netbeans использует Jetty для запуска Jenkins. Путь к классам, используемый при работе под NetBeans, - это java.class.path=C:\work\maven\boot\classworlds-1.1.jar (который является существующим банком), и я не нашел способ добавить что-либо к этому пути к классам, но если я добавлю log4j.xml в корень этого файла jar, он также будет найден и работает (очевидно, это не удовлетворительное решение). Я знаю, работает ли log4j или нет, просто посмотрев на вывод консоли, либо это правильные строки журнала, либо страшная ошибка log4j:WARN No appenders could be found for logger (TestLog). log4j:WARN Please initialize the log4j system properly., и ничего больше.

Вопрос. Как я могу использовать

  • log4j.xml, найденный в первом наборе местоположений,
  • или log4j.xml, найденный в местоположении вне целевого каталога, например C:\log4j\log4j.xml
  • или сделать maven и/или netbeans скопировать log4j.xml в место, где он находится сейчас
  • или любой другой хороший способ позволить мне предоставить мой плагин log4j.xml после очистки и сборки автоматически, при отладке с NB?
4b9b3361

Ответ 1

Вот как я получил maven для копирования файлов .class и .jar в новое место перед выполнением цели hpi:run. log4j.xml по-прежнему копируется в моем Java-коде в блоке static{} до создания экземпляра log4j. Чтобы использовать этот профиль, я добавил -P netbeans в аргументы командной строки maven в Netbeans:

Определение профиля и плагина в 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>

Построить XML для 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>

Ответ 2

Вы можете использовать Maven Ant плагин для запуска Ant script, который сделал копирование, или используйте Плагин ресурсов Maven, который, по-видимому, нацелен на ваш конкретный прецедент копирования файлов в выходной каталог.

Также помните, что вы можете параметризовать свою сборку, как описано здесь (игнорируйте часть Jenkins этого названия, ответ относится к общему использованию Maven).

Ответ 3

Вы можете использовать этот плагин в профиле:

<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>

Чтобы активировать: mvn -Pcopy generate-resources

Ответ 4

Вы можете использовать плагин копировать артефакт. Как и в hudson.