maven + external lib

0

Czesc, chce dolaczyc liba ktory nie znajduje sie normalnie w repo mavena: jpathwatch

To co zrobilam, to w projekcie utworzylam dodatkowy katalog "lib", wrzucilam tam tego jara i w pom.xml dalam:

 
		<dependency>
			<groupId>jpathwatch</groupId>
			<artifactId>jpathwatch</artifactId>
			<version>0-95</version>
			<scope>system</scope>
			<systemPath>${basedir}/lib/jpathwatch-0-95.jar</systemPath>
		</dependency>

Potem mvn clean, mvn install - buduje mi sie projekt, wszystkie jary sa kopiowane do katalogu target/dependencies - w tym rowniez ten moj jpathwatch!
Ale jak potem chce odpalic projekt: java -jar X.jar to dostaje err:

 
java.lang.ClassNotFoundException: name.pachler.nio.file.ClosedWatchServiceException

czyli czepia sie ze nie widzi klasy z tej mojej biblioteki. Ale czemu?? Przeciez ten jar jest przekopiowany do target/dependecies - tam gdzie wszystkie jary zdefiniowane w pomie! Totalnie tego nie kumam - moze ktos z Was ma pomysl o co chodzi?

     pzdr,
misty
0

dawno się z jarami nie kopałem, ale może w MANIFEST.MF nie dopisuje tego jara? Rozpakuj i spójrz czy inne używane jary tam są.

0

masz racje-nie ma tego tam! Masz moze pomysl jak to dodac? reszta jarow sie tam znajduje..

0

Przerobilam ten przyklad i z 10 innych i nic.. ciagle tego jara nie ma w manifescie! moj pom wyglada tak:

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

	<groupId>PIDMonitor</groupId>
	<artifactId>PIDMonitor</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>PIDMonitor</name>
	<a href="http://maven.apache.org">http://maven.apache.org</a>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>2.3.1</version>
				<configuration>
					<useDefaultManifestFile>true</useDefaultManifestFile>
					<archive>
						<index>false</index>
						<manifest>
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib/</classpathPrefix>
							<mainClass>com.test.Test</mainClass>
						</manifest>
					</archive>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.1</version>
				<executions>
					<execution>
						<id>copy</id>
						<phase>install</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>
								${project.build.directory}/lib
				</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>

		</plugins>

	</build>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>3.6.10.Final</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>3.6.10.Final</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-annotations</artifactId>
			<version>3.5.6-Final</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.18</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>3.1.1.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>3.1.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>jpathwatch</groupId>
			<artifactId>jpathwatch</artifactId>
			<version>0-95</version>
			<scope>system</scope>
			<systemPath>${basedir}/lib/jpathwatch-0-95.jar</systemPath>

		</dependency>

		<dependency>
			<groupId>jnotify</groupId>
			<artifactId>jnotify</artifactId>
			<version>0.93</version>
			<scope>system</scope>
			<systemPath>${basedir}/lib/jnotify-0.93.jar</systemPath>
		</dependency>

		<dependency>
			<groupId>jnotify-dll</groupId>
			<artifactId>jnotify-dll</artifactId>
			<version>0.93</version>
			<scope>system</scope>
			<systemPath>${basedir}/lib/jnotify.dll</systemPath>
		</dependency>
	</dependencies>
</project>

0

Takie zaleznosci sa jak scope provided - uzywane do kompilacji, ale nie sa pakowane. Mozesz zrobic tak, ze w pom zadeklarujesz swoje wlasne repo, ktore bedzie wskazywac na katalog lib w twoim projekcie, i zaleznosci beda pobierane z niego, tutaj jest przyklad: http://stackoverflow.com/questions/5597099/maven-add-jars-through-systempath-system-but-not-added-to-war-or-anywhere-else.

0

Ale ja wlasnie nie chce tak - bo to nie bedzie przenosne. Poki co zdefiniowalam sobie wlasnego manifesta i w pomie dodalam:

<manifestFile>MANIFEST.MF</manifestFile>

Ale jestem pewna ze to sie da jakos zrobic, musi sie dac! Nie daje mi to spokoju :)

0

No wlasnie dodanie repozytorium w folderze projektu i podanie ulr repo jako cos wzglednego do ${basedir} jest dla mnie bardzo przenosne...

0

Sa tam 2 przyklady ktore teoretycznie mialyby pomoc:

  1. Wlasnie z tym repo w lokalnym katalogu. Dalam:
 
	<repositories>
		<repository>
			<id>my-local-repo</id>
			<a href="file://${basedir}/lib">file://${basedir}/lib</a>
		</repository>
	</repositories>

a pozniej:

		<dependency>
			<groupId>jpathwatch</groupId>
			<artifactId>jpathwatch</artifactId>
			<version>0-95</version>
		</dependency>

i co mi to dalo? Nic, pom.xml na czerwono, nie da sie zbudowac. Pom mi krzyczy ze "missing artifacts" dla reszty jarow (ktore powinny byc wziete z http://maven.apache.org. Na poczatku mam deklaracje:

	<groupId>Test</groupId>
	<artifactId>Test</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>PIDMonitor</name>
	<a href="http://maven.apache.org">http://maven.apache.org</a>
  1. Drugi sposob to z tym antem:
			<plugin>
				<artifactId>maven-antrun-plugin</artifactId>
				<executions>
					<execution>
						<phase>test</phase>
						<goals>
							<goal>run</goal>
						</goals>
						<configuration>
							<tasks>
								<copy file="${project.basedir}/lib/jpathwatch-0-95.jar" todir="${project.build.directory}/lib" />
							</tasks>
						</configuration>
					</execution>
				</executions>
			</plugin>

ale nic mi to nie daje bo to tylko kopiuje tego jara do katalogu traget/lib (a to juz mam zrobione w moim pomie). Ten jar ma sie dopisywac do pliku manifest, a w tym przypadku sie tak nie dzieje..

pzdr,
misty

0

Mi chodzilo o ten pierwszy pomysl. Wklej taki pom.xml zeby pokazac problem, a nie z wszystkimi zaleznosciami (np. jedna zaleznosc z centrala i jedna twoja z lokalnego, plus cala reszta ustawien). Jaka wersja mavena?

0

To jest moj oryginalny, dzialacy pom, ten ktory uzywa zdefiniowanego przeze mnie manifesta:

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

	<groupId>Test</groupId>
	<artifactId>Test</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>Test</name>
	<a href="http://maven.apache.org">http://maven.apache.org</a>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>2.3.1</version>
				<configuration>
					<useDefaultManifestFile>true</useDefaultManifestFile>
					<archive>
						<index>false</index>
						<manifest>
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib/</classpathPrefix>
							<mainClass>test.Test</mainClass>
						</manifest>
                        <manifestFile>MANIFEST.MF</manifestFile>
					
					</archive>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.1</version>
				<executions>
					<execution>
						<id>copy</id>
						<phase>install</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>
								${project.build.directory}/lib
				</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

	<dependencies>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.18</version>
		</dependency>
		<dependency>
			<groupId>jpathwatch</groupId>
			<artifactId>jpathwatch</artifactId>
			<version>0-95</version>
			<scope>system</scope>
			<systemPath>${basedir}/lib/jpathwatch-0-95.jar</systemPath>
		</dependency>
	</dependencies>

</project>


 

A to jest wersja poma z przykladu z tej stronki co mi podales:

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

	<groupId>Test</groupId>
	<artifactId>Test</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>Test</name>
	<a href="http://maven.apache.org">http://maven.apache.org</a>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<repositories>
		<repository>
			<id>my-local-repo</id>
			<a href="file://${basedir}/lib">file://${basedir}/lib</a>
		</repository>
	</repositories>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>2.3.1</version>
				<configuration>
					<useDefaultManifestFile>true</useDefaultManifestFile>
					<archive>
						<index>false</index>
						<manifest>
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib/</classpathPrefix>
							<mainClass>test.Test</mainClass>
						</manifest>
					</archive>
				</configuration>
			</plugin>

		</plugins>
	</build>

	<dependencies>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.18</version>
		</dependency>
		<dependency>
			<groupId>jpathwatch</groupId>
			<artifactId>jpathwatch</artifactId>
			<version>0-95</version>
		</dependency>
	</dependencies>

</project>
 

I tutaj juz na wstepnie pom mi sie robi na czerwono i mam : Missing artifact mysql:mysql-connector-java🫙5.1.18:compile
Wersja mavena 2.2.1

pzdr,
misty

0

Co to znaczy ze jest na czerwono? To ze jakies IDE sobie z tym nie radzi nic nie znaczy, sprawdz czy maven sobie radzi.
Upgrade mavena by sie przydal. Jesli boisz sie ze nie wszyscy maja nowa wersje, mozesz uzyc pluginou maven-enforcer-plugin, i tam podac ze wymagasz minimum mavena 3 i jesli nie jest spelnione, build poda odpowiedni komunikat. Ja uzywam mavena 3.0.1 (tez powinienem zrobic upgrade) i dziala. Oto moj pom po pewnych cieciach:

<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>
        <groupId>Test</groupId>
        <artifactId>Test</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
        <name>Test</name>
        <a href="http://maven.apache.org">http://maven.apache.org</a>
        <properties>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        <repositories>
                <repository>
                        <id>my-local-repo</id>
                        <a href="file://${basedir}/lib">file://${basedir}/lib</a>
                </repository>
        </repositories>
        <dependencies>
                <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.18</version>
                </dependency>
                <dependency>
                        <groupId>jpathwatch</groupId>
                        <artifactId>jpathwatch</artifactId>
                        <version>0-95</version>
                </dependency>
        </dependencies>
</project>

A moje lokalne repo wyglada tak:

lib/
    jpathwatch
        jpathwatch
            0-95
                jpathwatch-0-95.jar

A oto wynik builda:

maria@hapek ~/Desktop/test
$ mvn clean compile -U
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Test 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: file://C:\Users\maria\Desktop\test/lib/jpathwatch/jpathwatch/0-95/jpathwatch-0-95.pom
Downloading: http://repo1.maven.org/maven2/jpathwatch/jpathwatch/0-95/jpathwatch-0-95.pom
[WARNING] The POM for jpathwatch:jpathwatch:jar:0-95 is missing, no dependency information available
Downloading: file://C:\Users\maria\Desktop\test/lib/jpathwatch/jpathwatch/0-95/jpathwatch-0-95.jar
[WARNING] Checksum validation failed, no checksums available from the repository for file://C:\Users\maria\Desktop\test
lib/jpathwatch/jpathwatch/0-95/jpathwatch-0-95.jar
Downloaded: file://C:\Users\maria\Desktop\test/lib/jpathwatch/jpathwatch/0-95/jpathwatch-0-95.jar (0 B at 0.0 KB/sec)
[INFO]
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ Test ---
[INFO]
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ Test ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\maria\Desktop\test\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ Test ---
[INFO] No sources to compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.102s
[INFO] Finished at: Wed Mar 28 10:48:04 CEST 2012
[INFO] Final Memory: 2M/15M
[INFO] ------------------------------------------------------------------------

Jak widzisz, dziala. Mam warningi mowiace ze nie ma pom i hashy, ale i na to sie zaradzi. Wez tego twojego jara, zawolaj install:install-file tak aby maven wrzucil to do prawdziwego, lokalnego repo, to wygeneruje domyslne pomy i hashe, i skopiuj caly ten katalog to twojego lib, po czym skasuj z lokalnego repo, aby miec pewnosc ze dziala tak jak chcesz a nie przez przypadek. Wzgledine, jesli masz poprawny pom.xml do tego jpathwatch, to mozesz install:install-file -DpomFile=mypom.xml dac (sprawdz na stronce pluginu, mozliwe ze uzywam zlej nazwy property), i zostanie uzyty poprawny pom, i obliczony dla niego hash.

0

Hej, no generalnie poszlo - chociaz wlasciwie nic nie zrobilam takiego - na nowo stworzylam tego poma, ale docelowo i tak wyglada on tak jak w moim poprzednim poscie ( musialam dodac maven-compiler-plugin/maven-jar-plugin/maven-dependency-plugin) - wiec troche nie kumam czemu wtedy nie szlo..

W eclipse mam pom na czerwono i troche mnie to wnerwia ;) Ale po prostu dodalam tego liba w properties projektu wiec moge korzystac z jego klas w eclipsie normalnie. Troche nie kumam czemu mi to zatem nie dzialalo wczesniej, ale moze mialam jednak jakas minimalna roznice wczesniej, jeszcze raz to przesledze.

Dzieki wielkie za pomoc, fajnie ze mi dziala i fajnie ze wiem cos nowego :)

pzdr,
misty

0

Pytanie jaki eclipse, jaka wersja wbudowanego mavena uzywana jest przez ktora wersja pluginu mavena dla eclipse. Z tego co pamietam ja nie mialem takich problemow, ale moge sie mylic.

1 użytkowników online, w tym zalogowanych: 0, gości: 1