Giter VIP home page Giter VIP logo

Comments (11)

bondolo avatar bondolo commented on May 28, 2024 4

@khmarbaise wrote:

I know that the provided scope is not available on the classpath cause it's defined provided which means it is provided by the runtime environment.

For exec:java there isn't usually anywhere else that the provided dependencies could come from unless they actually part of the standard java libraries. ie. built-in classes. The request in #61 is to make the provided depdendencies available in the runtime.

While the "provided" dependencies might be expected to be available in normal/exepcted execution circumstances it seems reasonable for exec:java to act as "provider" of these dependencies if it is acting as the execution container. Since exec:java is the execution container and the "provided" and "optional" dependencies won't otherwise be available it might even be argued that including them should be the default behaviour of exec:java.

from exec-maven-plugin.

rehevkor5 avatar rehevkor5 commented on May 28, 2024 3

@lbreuss The PR #61 has been ignored so far. At some point merge conflicts evolved from changes in master branch. I have just resolved those. If the builds succeed, the PR will again be ready to merge.

from exec-maven-plugin.

rehevkor5 avatar rehevkor5 commented on May 28, 2024 1

@bondolo Exactly! For local development purposes it's often useful to be able to run an app and use Maven to supply the "provided" dependencies rather than using the full deployment environment.

from exec-maven-plugin.

khmarbaise avatar khmarbaise commented on May 28, 2024

Based on the answer on SO it does not make sense. Or you you could provide a patch (as PR) ?

from exec-maven-plugin.

rehevkor5 avatar rehevkor5 commented on May 28, 2024

Try using the below POM along with a main class called "Main".

If you run mvn exec:java -P runtime, you get:

java.lang.NoClassDefFoundError: org/apache/log4j/Level

indicating that the "provided" dependency is not available.

If you run mvn exec:java -P compile, you get:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

indicating that the "runtime" dependency is not available.

I can attempt to make a PR to help fix this, but I could use some input on what the configuration should look like. Should we add a new value for "classpathScope" called "provided" which includes both runtime and provided?

<?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.nnoncarey.sha</groupId>
    <artifactId>maven-exec-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.5.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <profiles>
        <profile>
            <id>runtime</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>exec</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <mainClass>Main</mainClass>
                            <executable>java</executable>
                            <classpathScope>runtime</classpathScope>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>compile</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>exec</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <mainClass>Main</mainClass>
                            <executable>java</executable>
                            <classpathScope>compile</classpathScope>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

from exec-maven-plugin.

khmarbaise avatar khmarbaise commented on May 28, 2024

I know that the provided scope is not available on the classpath cause it's defined provided which means it is provided by the runtime environment. That was the reason that i said you could provide a patch which solves this problem ?

from exec-maven-plugin.

rehevkor5 avatar rehevkor5 commented on May 28, 2024

Oh, it sounded like you thought it made no sense. I can attempt a patch, but as I asked above, do you care what the configuration setting should be? Is "provided" ok as a new value for classpathScope?

from exec-maven-plugin.

rehevkor5 avatar rehevkor5 commented on May 28, 2024

@khmarbaise #61 created to resolve this.

from exec-maven-plugin.

lbreuss avatar lbreuss commented on May 28, 2024

@rehevkor5 What is the status of your merge request? Has it been cancelled or ignored?

This feature would be very welcome. My software references org.slf4j:slf4j-api:provided, and some :runtime dependencies down the road... Currently, I cannot run the application, as either scope "compile" or scope "runtime" will miss one or the other dependency...

from exec-maven-plugin.

bondolo avatar bondolo commented on May 28, 2024

I pinged @rfscholte and @khmarbaise on twitter. It appears this issue is at an impasse unless @olamy is able to approve. This project seems to need new/additional maintainers.

from exec-maven-plugin.

asbachb avatar asbachb commented on May 28, 2024

I know that the provided scope is not available on the classpath cause it's defined provided which means it is provided by the runtime environment. That was the reason that i said you could provide a patch which solves this problem ?

I guess there are use cases where you could consider exec-maven-plugin as the runtime environment.

from exec-maven-plugin.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.