2013-05-20 14 views
25

Do moich obecnych celów mam projekt Maven, który tworzy plik war i chcę zobaczyć, jaka rzeczywista ścieżka klas używa podczas tworzenia war. Czy istnieje sposób, aby to zrobić w jednym poleceniu - bez konieczności kompilowania całego projektu?W Maven, w jaki sposób wyprowadzana jest ścieżka klas?

Jedną z możliwości jest wygenerowanie przez Mavena pliku target/classpath.properties, a następnie zatrzymanie go.

+0

to powinno być podstawowe wymaganie dla maven. ale jestem pewien, że się nie zgadzają. – weima

Odpowiedz

46

Aby uzyskać ścieżkę klasy wszystko sama w pliku, możesz:

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

Or dodać to do 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> 

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

+1

"Zależność mvn: build-classpath" będzie domyślnie ouput ścieżką klasy dla ' test' [zakres zależności] (https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope), który obejmuje 'system',' provided', 'compile',' runtime' i 'test'. Jeśli chcesz uzyskać ścieżkę klasy dla zakresów 'compile' lub' runtime'. Możesz użyć '-Dmdep.includeScope = compile' – ecerulm

12

lub zadzwoń "mvn -e X ...." i sprawdzić wyjście ...

+0

Nie sądzę, że rozwiązuje problem, ponieważ wyświetlanie błędów i informacje debugowania nie pomagają wyprowadzać użytej ścieżki klasy. –

+3

informacje debugowania zawiera całą ścieżkę klasy dla każdej zaangażowanej plugin cyklu życia (incl. Innych rzeczy również) –

+0

Thank you sir napisałem iteracji nad roztworem, zachęcamy do ponownego użycia któregokolwiek z niego, jeśli uznają to za korzystne dla przyszłego czytelnika , ponieważ teraz moja odpowiedź jest na dole i kilka osób ją przeczyta (http://stackoverflow.com/a/37551032/2265487) – ElMesa

1

to śpiewać le command solution, ale dokonuje kompilacji kodu.

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

Shell przykład skrypt użytkowania

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

użyłem odmianę go w skrypt powłoki uruchamiający autonomiczną funkcję main() (do generowania schematów hibernacji) w ten sposób

#/bin/bash 

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

java $MAVEN_TEST_CLASSPATH foo.bar.DBSchemaCreate 

przykład wyjście pliku

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

Z komendą 3.3.9, polecenie grep nie zwraca nic (niestety nie widzę żadnej ścieżki klasy podczas działania z opcją -e -X). Czy może być aktualizacja tego rozwiązania? –

+0

Testowany teraz w Mennicy 18 (w oparciu o Ubuntu 16.04) i działa: O. Czy możesz podać odpowiedzi konsoli dla 'uname -a' i' maven --version'? Na testowanym systemie z pomyślnymi wynikami są $ uname -a -> '" Linux ******* 4.4.0-21-generiC# 37-Ubuntu SMP Pon 18 kwietnia 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux "'. $ mvn --version -> '" Apache Maven 3.3.9, wersja Java: 1.8.0_111, dostawca: Oracle Corporation, nazwa systemu operacyjnego: "linux", wersja: '4.4.0-21-generic', arch: ' amd64 ', rodzina:' unix'' – ElMesa

+0

Zauważ, że jeśli nie masz Linuksa grep może nie być w twoim systemie (jak w Windows) lub może zachowywać się inaczej (jak na MacOSie dla niektórych kombinacji opcji). możesz wypróbować Cygwin lub MinGW, aby mieć grep, ale nie wiem, czy będziesz miał problemy podobne do maco, gdzie Cygwin lub MinGW mogą zachowywać się inaczej niż te używane w pakietach Ubuntu 16.04. (jeśli używasz Windowsa i znajdź użyteczne podejście MinGW lub Cygwin, proszę dać mi znać, aby zaktualizować odpowiedź) – ElMesa

3

Komenda mvn dependency:list pokaże ścieżkę klasy ze wszystkimi słoików wykorzystywanych do opracowywania, wykonywania i badania w następującym formacie:

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 

Jedynym Warunkiem jest, aby kompilacja została zakończona. Nie działa, jeśli kompilacja nie jest uruchomiona.

Inną komendą jest polecenie mvn dependency:tree.

3

Polecenie wyjścia ścieżka klasy na Mac i Linux:

Po wynikiem drukowane i nie został zapisany w pliku może być przydatne na przykład podczas przypisywania wynik do zmiennej w bash scenariusz. To rozwiązanie działa tylko na komputerach Mac i Linux, ale także skrypty powłoki Bash.

W systemie Windows (np.w BAT pliki), gdzie nie ma echo wykonywalny, trzeba będzie coś takiego (niesprawdzone):

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

Alternatywnie, można po prostu wykonać java programu ze ścieżki klasy:

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

Lub nawet tak (automatycznie użyje właściwej ścieżki):

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

Jednak oba te alternatywne podejścia cierpią z powodu dodania przez Mavego komunikatów o błędach w przypadku awarii programu.

+0

Jak to jest lepsze niż zaakceptowana odpowiedź na to pytanie? – iehrlich

+0

Wysyła ścieżkę klas zamiast zapisywać ją w pliku. – Danilcha

Powiązane problemy