В Maven, как выводить используемый путь к классам?

для моих текущих целей у меня есть проект Maven, который создает war файл, и я хочу увидеть, какой фактический путь к классам он использует при создании war. Есть ли способ сделать это в одной команде-без необходимости компилировать весь проект?

одна идея состоит в том, чтобы Maven генерировал target/classpath.properties файл, а затем остановитесь в этой точке.

6 ответов


чтобы получить путь к классам сам по себе в файле, вы можете:

mvn dependency:build-classpath -Dmdep.outputFile=cp.txt

или добавьте это в POM.XML-код:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.9</version>
        <executions>
          <execution>
            <id>build-classpath</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>build-classpath</goal>
            </goals>
            <configuration>
              <!-- configure the plugin here -->
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

From:http://maven.apache.org/plugins/maven-dependency-plugin/usage.html


или вызовите " mvn-e-X ...."и проверьте результат...


эта команда выходы путь к классам на Mac и Linux:

mvn -q exec:exec -Dexec.executable=echo -Dexec.args="%classpath"

напечатать результат и не сохранить его в файл может быть полезно, например, при назначении результата переменной в скрипте Bash. Это решение работает только на Mac и Linux, но и скрипты оболочки Bash.

в Windows (например, в файлах BAT), где нет echo исполняемого файла, вам понадобится что-то вроде этого (непроверено):

mvn -q exec:exec -Dexec.executable=cmd -Dexec.args="/c echo %classpath"

кроме того, вы можете просто выполнить java программа с classpath:

mvn -q exec:exec -Dexec.executable=java -Dexec.args="-cp %classpath Main"

или даже так (он будет использовать правильный путь к классам автоматически):

mvn -q exec:java -Dexec.mainClass="Main" 

однако оба этих альтернативных подхода страдают от Maven добавления сообщений об ошибках, когда ваша программа терпит неудачу.


команда mvn dependency:list перечислит путь к классам со всеми банками, используемыми для компиляции, выполнения и тестирования в следующем формате:

INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ MyProject ---
[INFO]
[INFO] The following files have been resolved:
[INFO]    org.netbeans.api:org-openide-filesystems:jar:RELEASE80:compile
[INFO]    org.netbeans.api:org-netbeans-modules-queries:jar:RELEASE80:compile
[INFO]    org.netbeans.api:org-netbeans-api-progress:jar:RELEASE80:compile
[INFO]    org.netbeans.api:org-openide-dialogs:jar:RELEASE80:compile
[INFO]    org.apache.derby:derby:jar:10.11.1.1:compile
[INFO]    org.netbeans.api:org-openide-windows:jar:RELEASE80:compile

единственное требование заключается в том, что компиляция закончена. Он не работает, если компиляция не запущена.

другая команда-это команда mvn dependency:tree.


это решение одной команды но компилируется код.

mvn -e -X -Dmaven.test.skip=true clean compile | grep -o -P '\-classpath .*? ' | awk '{print }'

пример использования сценария оболочки

MAVEN_CLASSPATH=$(mvn -e -X -Dmaven.test.skip=true clean compile | grep -o -P '\-classpath .*? ' | awk '{print }')

я использовал его вариант в сценарии оболочки для запуска автономного main () (для генерации схемы Hibernate) таким образом

#/bin/bash

MAVEN_TEST_CLASSPATH=$(mvn -e -X clean package | grep -o -P '\-classpath .*?test.*? ')

java $MAVEN_TEST_CLASSPATH foo.bar.DBSchemaCreate

пример вывода

mvn -e -X -Dmaven.test.skip=true clean compile | grep -o -P '\-classpath .*? ' | awk '{print }' > maven.classpath

As ecerulm отметил в своем комментарии Яник-х, вы можете указать область dependency:build-classpath, поскольку выходные данные classpath будут отличаться для разных областей (по умолчанию test используется по какой-то причине). Я закончил с такой командой:

mvn -DincludeScope=compile dependency:build-classpath

в POM, он может быть использован следующим образом:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.9</version>
        <executions>
          <execution>
            <id>build-classpath</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>build-classpath</goal>
            </goals>
            <configuration>
              <includeScope>compile</includeScope>
              <!-- Omit to print on console: -->
              <outputFile>${project.build.directory}/compile-classpath.txt</outputFile>
            </configuration>
          </execution>
          <execution>
            <id>build-test-classpath</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>build-classpath</goal>
            </goals>
            <configuration>
              <includeScope>test</includeScope>
              <!-- Omit to print on console: -->
              <outputFile>${project.build.directory}/test-classpath.txt</outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

это выведет 2 версии classpath, одну для основной сборки, а другую для тестов.