Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Prendere versione del programma dal pom di Maven

    ciao!

    sto usando maven per compilare il mio programma.
    questo il mio pom.xml:
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <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>com.mp.photogallery</groupId>
        <artifactId>MPPhotoGallery</artifactId>
        <version>1.0</version>
        <name>MPPhotoGallery</name>
    
        <dependencies>
            ...........
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.6.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.6.0</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>java</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <mainClass>com.mp.photogallery.Main</mainClass>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>copy-dependencies</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                <overWriteReleases>false</overWriteReleases>
                                <overWriteSnapshots>false</overWriteSnapshots>
                                <overWriteIfNewer>true</overWriteIfNewer>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.mp.photogallery.Main</mainClass>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix>lib/</classpathPrefix>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    </project>
    poi nella mia interfaccia grafica vorrei fare la classica finestra di about, in cui mostrare anche il numero di versione.
    e vorrei prendere il numero di versione dal pom, in modo da doverlo modificare solo li.
    è possibile??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fermat Visualizza il messaggio
    e vorrei prendere il numero di versione dal pom, in modo da doverlo modificare solo li.
    è possibile??
    Ci sono sicuramente diverse possibilità ma una semplice è sfruttare il resource filtering di Maven (che va attivato nel pom). Poi crei un file di .properties (sotto resources, naturalmente) con una property del tipo:

    app.version = ${project.version}

    Grazie al resource filtering quella ${ ... } viene espansa da Maven durante il build e nel file di properties che l'applicazione usa realmente c'è qualcosa tipo app.version = 1.0

    A quel punto leggi il file di properties da Java come "risorsa" in classpath.

    Ah, puoi usare ovviamente anche le altre property di maven, project.name, ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    ok, ho aggiunto questo nella sezione build del pom:
    codice:
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

    poi ho creato il file di properties:
    codice:
    app.version = ${project.version}

    infine ho richiamato il file:
    codice:
    try {
        System.out.println(ConfigurationProperties.getProperties(Main.class.getClassLoader().getResource("info.properties").getFile()));
    } catch (IOException e) {
        e.printStackTrace();
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }

    dove quel ConfigurationProperties.getProperties è un mio metodo per leggere i file di properties.
    sembra funzionare senza problemi.
    grazie per la dritta!!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fermat Visualizza il messaggio
    getResource("info.properties").getFile()
    No, questo (in rosso) no.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Quote Originariamente inviata da andbin Visualizza il messaggio
    No, questo (in rosso) no.
    perchè no??
    il metodo statico ConfigurationProperties.getProperties richiede come parametro uno String.
    che corrisponde al file da leggere.
    come dovrei fare per dirgli quale path dovrebbe prendere??

    codice:
    public static synchronized HashMap<String, String> getProperties(String file) throws IOException {
        File fileProperties = new File(file);
        HashMap<String, String> map = new HashMap<>();
        Properties props = new Properties();
        props.load(new FileInputStream(fileProperties));
        props.stringPropertyNames().stream().forEach((name) -> {
            map.put(name, props.getProperty(name));
        });
        return map;
    }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fermat Visualizza il messaggio
    perchè no??
    Perché se impacchetti tutto in un jar (e il file di properties è nel jar), non ti funzionerà.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    ok, cmq ho fatto quel metodo l'ho scritto 200 anni fa, non mi piaceva un granchè.
    al momento ho fatto semplicmente così:
    codice:
    @FXML
    public void initialize() {
        try {
            Properties props = new Properties();
            props.load(getClass().getClassLoader().getResourceAsStream("info.properties"));
            String version = props.getProperty("app.version");
            System.out.println(version);
        } catch (IOException e) {
            GenericDialog.showDialog(e.getMessage(), Alert.AlertType.ERROR);
        }
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.